scala中的'def'计算结果是什么?

scala中的'def'计算结果是什么?,scala,lazy-evaluation,Scala,Lazy Evaluation,我写的这是Scala Repl 定义suma:Int,b:Int=a+b 这被评估为 和:a:Int,b:Int在Repl中。Scala中的def是惰性评估的。那么,Repl显示的类型是什么?另外,当调用sum1,2时,如何对其进行求值,或者如何将a:Int,b:Int求值为Int 我在Scala和val玩的时候注意到了这一点。如果我写val sum=a:Int,b:Int=a+b,这将被急切地计算为Int,Int=>Int=这在执行apply函数调用时很好。但是我不明白在def的情况下会发生什

我写的这是Scala Repl

定义suma:Int,b:Int=a+b 这被评估为 和:a:Int,b:Int在Repl中。Scala中的def是惰性评估的。那么,Repl显示的类型是什么?另外,当调用sum1,2时,如何对其进行求值,或者如何将a:Int,b:Int求值为Int

我在Scala和val玩的时候注意到了这一点。如果我写val sum=a:Int,b:Int=a+b,这将被急切地计算为Int,Int=>Int=这在执行apply函数调用时很好。但是我不明白在def的情况下会发生什么。

REPL显示的sum:a:Int,b:Int有点编译器内部泄漏给用户

sum是一个方法,因此没有类型a:Int,b:Int的实际值,但是编译器在内部将sum与一个名为method type的东西相关联-它是一个保存方法签名的类型-它的参数名和类型+结果类型。此类型仅存在于编译器中,不能直接用Scala代码编写。

REPL显示的sum:a:Int,b:Int是编译器内部泄漏给用户的一点


sum是一个方法,因此没有类型a:Int,b:Int的实际值,但是编译器在内部将sum与一个名为method type的东西相关联-它是一个保存方法签名的类型-它的参数名和类型+结果类型。此类型仅存在于编译器中,不能直接用Scala代码编写。

@DmytroMitin yep这很有帮助。@DmytroMitin yep这很有帮助。作为次要警告:方法类型在语言规范中有描述,它们不仅仅是编译器内部。作为次要警告:方法类型在语言规范中有描述,它们不仅仅是编译器内部。