2

Suppose I have the following file test.scala

import scala.language.postfixOps

trait Trait {
  var v = 'a

  def update(x :Symbol):Unit = {
    v = x
  }
}

object x extends Trait
x update 'b
// value of x.v is now 'b, as expected

object y extends Trait {
  update('c)
}
// value of y.v is now 'c, as expected

object z extends Trait {
  // this causes compilation failure:
  update 'd
}

When I run the above code, the postfix invocation inside the object z init block fails:

$ scala test.scala
test.scala:23: error: ';' expected but symbol literal found.
update 'd

I haven't had any luck trying to find an explaination for why scala fails to understand the postfix inside the object init block, or what (if anything) can be done to make it work.

eje
  • 945
  • 11
  • 22

1 Answers1

1

You intended infix:

object z extends Trait { this update 'd }

Postfix means;

scala> trait Trait { var v = 'a; def update(x :Symbol) = v = x; def reset = v = 'a }
defined trait Trait

scala> object z extends Trait { this update 'd }
defined object z

scala> z reset
warning: there were 1 feature warning(s); re-run with -feature for details

scala> z.v
res1: Symbol = 'a
som-snytt
  • 39,429
  • 2
  • 47
  • 129
  • No doubt it duplicates something. But your Q has upvotes, which is why the feature is behind the `import language._`. – som-snytt May 23 '14 at 18:03