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

时间:2015-04-19 14:49:56

标签: scala

demo1的:

def double(d: Int) = d * 2
val myDouble: Int => Int = double
myDouble(3)

演示可以编译并运行良好,然后

我定义了一个没有参数的函数 DEMO2:

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

 //the error message is:error: type mismatch;
 //found   : Int
 //required: () => Int

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

2 个答案:

答案 0 :(得分: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 = <function0>

答案 1 :(得分:2)

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

val myDouble2= double2 _

使用'通配符运算符'