我在斯卡拉下面的代碼播放框架:奇怪Scala編譯器警告
case class Step(name: String, f: Unit) {
def run = {() => f}
}
編譯器給了我一個奇怪的警告有關
comparing values of type Unit and Unit using '==' will always yield true
我在斯卡拉下面的代碼播放框架:奇怪Scala編譯器警告
case class Step(name: String, f: Unit) {
def run = {() => f}
}
編譯器給了我一個奇怪的警告有關
comparing values of type Unit and Unit using '==' will always yield true
這是因爲case類定義你的==
方法,它比較案例分類中的每個字段。所以Step("a", println("1")) == Step("a", println("2"))
是真的,即使認爲Unit
函數是不一樣的。
這是非常不可能的,你真的需要f: Unit
。畢竟,Unit
只有一個值:()
。
我想你可能會想這樣做的:
Step("Debugging", println("here"))
其中,的確,尊重所有的類型,但會不打印「這裏」呼叫run
時,或將run
的返回值。相反,當初始化Step
時,它將打印「here」,然後將返回值()
傳遞到f
。在你撥打run
時,它什麼都不會做。
也許你想這個代替:
case class Step(name: String, f: => Unit) {
def run = {() => f}
}
甚至:
case class Step(name: String, f: => Unit) {
def run = f
}
好,理解case類創建應用,並自動取消應用方法,現在我還記得。但是我應該怎麼寫呢?或者我應該放棄案例類並切換到帶有類參數的簡單類? –
伴侶對象與應用方法?它聽起來如何? –
是的,它就像一個魅力,會接受你的答案! –