true
チェーンの上の定義された場所に移動できるので、これは私に考えさせられました。ある時点で、コンパイラーは多くのパスをたどって、最良の推測を行う必要があります。
これは常に真実です
if (true) 1 else false
これもそうですが、より高いレベルで
val presetBoolean = true
if (presetBoolean) 1 else false
これもそうですが、評価された式を通して
val presetBoolean = (1 == 1)
if (presetBoolean) 1 else false
これも一定ですが、この場合は別のオブジェクトへの参照を渡します(そして私のプログラムの唯一のインスタンスです
case object CallWithPreset {
def apply(presetBoolean:Boolean) {
if(presetBoolean) 1 else false
}
}
CallWithPreset(true)
推論ごとにコンパイル時間の形でオーバーヘッドがあります。ですから、些細なケースでは簡単かもしれないと思いますが、他のケースではおそらくそうではないでしょう。ただし、すべてではなく一部のケースを許可した場合、それぞれが異なる推論を行う可能性があり、混乱を招く可能性があります。
たとえば、これが機能した場合:
val myType:Int = if(true) 1 else false
しかし、これはコンパイルエラーを引き起こしました:
val presetBoolean = true
val myType:Int = if (presetBoolean) 1 else false