Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala编译错误-找到:Int必需:Int=>;Int_Scala_Function_Literals_Function Literal - Fatal编程技术网

Scala编译错误-找到:Int必需:Int=>;Int

Scala编译错误-找到:Int必需:Int=>;Int,scala,function,literals,function-literal,Scala,Function,Literals,Function Literal,我是斯卡拉的新手。我不理解以下代码的编译错误: def delayed( t:(Int)=> Int):Unit={ println("In delayed method") var y=t; println(y) } def time(x:Int):Int={ x*2 } 当我打电话的时候 delayed(time(8)) 我得到以下错误: scala> delayed(time(8)) <console>:15: error:

我是斯卡拉的新手。我不理解以下代码的编译错误:

def delayed( t:(Int)=> Int):Unit={
    println("In delayed method")
    var y=t; 
    println(y)
}

def time(x:Int):Int={
    x*2
}
当我打电话的时候

delayed(time(8))
我得到以下错误:

scala> delayed(time(8))
<console>:15: error: type mismatch;
found   : Int
required: Int => Int
delayed(time(8))
        ^


您的函数
delayed
期望函数作为参数,但是,您传递了
Int
。这就是为什么你会出错

delayed
的参数类型是
Int=>Int
,这意味着它是一个函数,接受一个
Int
作为参数并返回
Int

scala> delayed(time(8))
<console>:14: error: type mismatch;
 found   : Int
 required: Int => Int
       delayed(time(8))
                   ^
您的函数
time
Int=>Int
函数,但是,当您将
time(8)
传递给
delayed
函数时,
time(8)
将在传递给
delaye
之前进行评估,评估结果只是一个
Int

scala> delayed(time(8))
<console>:14: error: type mismatch;
 found   : Int
 required: Int => Int
       delayed(time(8))
                   ^
如果要将时间(8)作为函数参数传递,则应将时间更改为返回函数:

scala> def time(x:Int) = () => x*2
您还需要修改
delayed
函数,如下所示:

def delayed(t:()=>Int) {
    println("In delayed method")
    var y=t();
    println(y)
}
然后您可以将
时间(8)
传递到
delayed

scala> delayed(time(8))
In delayed method
16
或者,您可以使用注释中提到的@Tzach的名称调用

scala> def delayed(t: =>Int) {
     |   println("In delayed method")
     |   var y = t
     |   println(y)
     | }
delayed: (t: => Int)Unit

scala> def time(t:Int) = t*2
time: (t: Int)Int

scala> delayed(time(8))
In delayed method
16

方法
delayed
需要一个具有输入参数
Int
和返回类型
Int
但在您的示例中,您正在传递
time
函数的结果

这会解决你的问题

delayed(time)

非常感谢你。但是,有没有一种方法可以在延迟函数中传递时间函数,而不必事先计算它?你能告诉语法做同样的事吗?我怎样才能把一个参数传递给time方法呢?谢谢你的回复。还有一件事,请注意,当您编写def delayed(t:=>Int)时,代码可以工作,但是如果我不提供空格b/w:“:”和“=>”,代码将失败,并给出编译错误。这个空格表示什么吗?您能告诉我这行中的参数是什么意思吗-def delayed(t:=>Int)?这是否意味着有一个函数将被延迟传递,它可以有任意数量的参数,并且返回Int?它可以用于任意数量的参数,或者我们可以为要传递的函数指定特定数量的参数吗?Thnks a lot您可能只是指
def delayed(t:=>Int):Unit
,这意味着
t
具有类型
Int
,但它是一个按名称调用的参数,这意味着它只在方法体内部使用时得到计算,而不是在调用方法时得到计算。你所做的是不同的-如下所述,
t
不是
Int
,而是一个函数
Int=>Int
,我想你应该在另一个问题中问这个问题。如果您更改问题,以下所有答案都将无效。抱歉@ntlabs。我又问了一个问题。谢谢
scala> delayed(time(8))
In delayed method
16
scala> def delayed(t: =>Int) {
     |   println("In delayed method")
     |   var y = t
     |   println(y)
     | }
delayed: (t: => Int)Unit

scala> def time(t:Int) = t*2
time: (t: Int)Int

scala> delayed(time(8))
In delayed method
16
delayed(time)