加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读