如何为无参数函数定义scala类型?

时间:2011-08-29 10:19:48

标签: scala syntax-error scala-2.8

这有效

def func(f: => Int) = f

这不是(例如内部课程)

type EmptyFunct = => Int

 type EmptyFunct = (=> Int)

Scala版本2.9 两个问题:

  1. 为什么在第二种情况下不能使用语法糖?
  2. 如何在没有语法糖的情况下定义此函数?

3 个答案:

答案 0 :(得分:12)

=> Int不是没有参数的函数,它是一个带有名称传递约定的Int参数。 (当然,这是相当好的一点,因为它通过传递没有参数的函数来实现)。

没有参数的函数写为() => Int。你可以做type EmptyFunct = () => Int

这不是一种类型。在func里面,f将被输入为Int。类型为()=>的参数Int不会。

def func(f: => Int) = f *2
  

func(:=> Int)Int

但是

def func(f: () => Int) : Int = f*2
  

错误:值*不是()=>的成员INT

答案 1 :(得分:3)

您应该使用Function0

在第一种情况下它不起作用,因为你声明了一个非参数Function但是因为你指出该参数是按名称调用的。

答案 2 :(得分:0)

我在方法中看不到多少意义,返回一个没有参数调用的int。要么它返回一个常量,所以你可以使用常量,或者它会使用var?

那么让我们来看看var:

var k = 10 
val fi = List (() => k * 2, () => k - 2)
val n = fi(0)
n.apply 
k = 11
n.apply

结果是20,然后是22.