2

我想让下面的代码工作,但我得到一个编译错误:'object A#c does not take parameters'

"b" 光盘

如果我不使用'd',代码编译得很好。它一定与对我来说是新的中缀/后缀运算符有关。有人可以帮我使上面的代码工作,并向我解释(或给我一些指示)为什么上面的代码语法不起作用?

我的班级定义:

object A {
    implicit def stringToA(b: String) : A = new A(b)
}

class A(private val b: String) {

    object c {
        println("c")

        def d: Unit = {
            println("d!")
        }
    }
}
4

1 回答 1

4

在 scalaa op b中是a.op(b),所以你的"b" c d意愿是"b".c(d),但你想要的是"b".c.d,所以你需要完整地编写它。

如果你真的需要写它"b" c d,你可以尝试为d一个方法做一个arg c,例如

trait D {}

object d extends D

class A {

   def c(ignored: D) = println("d!")

}

或者可能

class A {

   object c {
      def apply(ignored: D) = println("d!")
   }
}
于 2012-07-28T19:37:55.970 回答