Scala:如何将没有参数的函数分配给变量或值?

Scala:如何将没有参数的函数分配给变量或值?,scala,Scala,演示1: 演示可以很好地编译和运行,然后 我定义了一个没有参数的函数 演示2: 如何将没有参数的函数分配给值标识符,谢谢 我无法告诉您,如果方法不带参数,编译器为什么不隐式地将该方法转换为函数,但您可以使用下划线使其显式: def double2 = 2 * 2 val myDouble2: () => Int = double2 //the error message is:error: type mismatch; //found : Int //required: ()

演示1:

演示可以很好地编译和运行,然后

我定义了一个没有参数的函数 演示2:


如何将没有参数的函数分配给值标识符,谢谢

我无法告诉您,如果方法不带参数,编译器为什么不隐式地将该方法转换为函数,但您可以使用下划线使其显式:

def double2 = 2 * 2
val myDouble2: () => Int = double2 

 //the error message is:error: type mismatch;
 //found   : Int
 //required: () => Int
scala>val myDouble2:()=>Int=double2_
myDouble2:()=>Int=
scala>myDouble2()
res2:Int=4
另一种方法是在方法声明中添加括号,这显然会在赋值时正确转换为函数:

scala> val myDouble2: () => Int = double2 _
myDouble2: () => Int = <function0>

scala> myDouble2()
res2: Int = 4
scala>def double2()=2*2
double2:()Int
scala>val myDouble2:()=>Int=double2
myDouble2:()=>Int=

我找到了一种实现此功能的方法,如下所示:

scala> def double2() = 2 * 2
double2: ()Int

scala> val myDouble2: () => Int = double2 
myDouble2: () => Int = <function0>

使用“通配符运算符”

也可以使用:def double2=()=>2*2
scala> def double2() = 2 * 2
double2: ()Int

scala> val myDouble2: () => Int = double2 
myDouble2: () => Int = <function0>
val myDouble2= double2 _