scala - Referencing vals in method returning new trait instance inside trait -
in following, have trouble referencing trait's offset value within +
method (line 4).
as written this.offset
zero. want offset lhs of +
operation.
how should done?
trait side { val offset: int // <- want refer def +(side: side) = new object side { val offset: int = this.offset + side.offset // instead `this.offset` 0 } } case object left extends side { val offset = -1 } case object right extends side { val offset = 1 } (left + right).offset // -> (0 + 1) -> 1 (right + left).offset // -> (0 + -1) -> -1
the following works because side.this
not refer anonymous class under construction.
anonymity has privileges.
scala> :pa // entering paste mode (ctrl-d finish) trait side { val offset: int def +(side: side) = new side { val offset = side.this.offset + side.offset } } // exiting paste mode, interpreting. defined trait side scala> new side { val offset = 1 } res0: side = $anon$1@7e070e85 scala> new side { val offset = 2 } res1: side = $anon$1@5f701cd1 scala> res0+res1 res2: side = side$$anon$1@188ef927 scala> .offset res3: int = 3
first guess, thinking shadowing problem:
scala> :pa // entering paste mode (ctrl-d finish) trait side { val offset: int def +(side: side) = new { val offset = side.this.offset + side.offset } side } // exiting paste mode, interpreting. defined trait side scala> new side { val offset = 1 } res5: side = $anon$1@3fa76a13 scala> new side { val offset = 2 } res6: side = $anon$1@465fb2a5 scala> res5+res6 res7: side = side$$anon$1@7e84d99c scala> .offset res8: int = 3
ha. night , luck.
Comments
Post a Comment