scala – 为什么抛出堆栈溢出异常?
发布时间:2020-12-16 18:02:41 所属栏目:安全 来源:网络整理
导读:……尽管它可以通过尾部调用进行优化? 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(s
……尽管它可以通过尾部调用进行优化?
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) } 反正是否强制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 = 使方法私有排序 我怀疑在字节码级别上,有两个调用方法的指令:virtual_call和tail_call. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |