......尽管它可以通过尾部调用进行优化?
def areStreamsEqual(stream1: InputStream, stream2: InputStream): Boolean =
{
val one = stream1.read()
val two = stream2.read()
if(one != two)
false
else if(one == -1 && two == -1)
true
else
areStreamsEqual(stream1, stream2)
}
Run Code Online (Sandbox Code Playgroud)
反正是否强制Scala编译器在这里进行尾调用优化?
感谢pst关于@tailrec的评论.鉴于注释scala编译器错误消息解释了不优化方法的原因.
<filename>.scala:64: error: could not optimize @tailrec annotated method: it is neither private nor final so can be overridden
def areStreamsEqual(stream1: InputStream, stream2: InputStream): Boolean =
Run Code Online (Sandbox Code Playgroud)
使方法私有排序
我怀疑在字节码级别上,有两个调用方法的指令:virtual_call和tail_call.