2012-07-28 78 views
2

我要讓下面的代碼工作,但我得到一個編譯錯誤:「 對象A#C不帶參數」斯卡拉綴/後綴運算符

「B」 CD

如果我離開關閉'd'代碼編譯就好了。它必須與我所用的infix/postfix操作符有關。有人可以幫助我使上述代碼工作,並且還向我解釋(或者給我一些指示)爲什麼上面的代碼語法不起作用?

我的類定義:

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

在斯卡拉a op ba.op(b),所以你"b" c d"b".c(d),但你想要的是"b".c.d,所以你需要將其完全寫。

如果你真的需要把它寫"b" c d,你可以試着讓d的方法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!") 
    } 
} 
+0

迪迪埃謝謝您的回答。我得到了它的工作。我認爲唯一的缺點是涉及到很多對象。對於小型項目,我認爲這不是問題,但對於更大的項目,我擔心你失去了哪些類別相互之間的概述。但我認爲斯卡拉是一種很酷的語言 – user1024435 2012-07-29 11:20:39

+0

這肯定不是我會做或不鼓勵的。只有在使用DSL時才使用它,並且您確實需要將其設置爲「b」c d「。 – 2012-07-29 20:30:44