ScalaPlayFrameworkに次のコードがあります。
case class Step(name: String, f: Unit) {
def run = {() => f}
}
コンパイラは私に奇妙な警告を出します
comparing values of type Unit and Unit using '==' will always yield true
ScalaPlayFrameworkに次のコードがあります。
case class Step(name: String, f: Unit) {
def run = {() => f}
}
コンパイラは私に奇妙な警告を出します
comparing values of type Unit and Unit using '==' will always yield true
==
これは、ケース クラスがケース クラスの各フィールドを比較するメソッドを定義するためです。機能が同じではないStep("a", println("1")) == Step("a", println("2"))
としてもそうです。Unit
あなたが本当に必要としている可能性は非常に低いですf: Unit
。結局のところ、Unit
値は 1 つだけです: ()
.
私はあなたがこれを行うことを考えているかもしれないと思います:
Step("Debugging", println("here"))
実際、これはすべてのタイプを尊重しますが、 を呼び出すとき、またはの戻り値を適用するときに「ここ」を出力しません。代わりに、 を初期化するときに「here」と出力し、戻り値 を に渡します。を呼び出した時点では、何もしません。run
run
Step
()
f
run
おそらく、代わりにこれが必要でした:
case class Step(name: String, f: => Unit) {
def run = {() => f}
}
あるいは:
case class Step(name: String, f: => Unit) {
def run = f
}