我是scala的新手。我不理解以下代码的编译错误:
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))
^
请解释一下是什么问题?还请建议一个很好的链接来理解scala中的函数和函数文字。我无法完全理解。
非常感谢
编辑:
请说明
之间的区别 def delayed( t: Int => Int):Unit = {
和
def delayed(t: =>Int):Unit {
和
def delayed(t:=>Int):Unit { (without space b/w ":" and "=>"))
答案 0 :(得分:2)
您的函数delayed
期望函数作为参数,但是,您通过了Int
。这就是你得到错误的原因。
delayed
的参数类型为Int=>Int
,这意味着它是一个函数,接受一个Int
作为参数并返回Int
。
您的函数time
是Int=>Int
函数,但是,当您将time(8)
传递给delayed
函数时,time(8)
将在传递给delay
之前进行评估Int
,评估结果只是scala> delayed(time(8))
<console>:14: error: type mismatch;
found : Int
required: Int => Int
delayed(time(8))
^
。
time
如果您仅通过scala> delayed(time)
In delayed method
<function1>
功能,它将起作用。
time(8)
如果要将time
作为函数参数传递,则应将scala> def time(x:Int) = () => x*2
函数更改为返回函数:
delayed
您还需要修改def delayed(t:()=>Int) {
println("In delayed method")
var y=t();
println(y)
}
功能,如下所示:
time(8)
然后,您可以将delayed
传递给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
或者您可以使用按名称调用作为评论中提到的@Tzach。
linecount = 10
with open('1.csv', 'r') as f, open('out.csv', 'w') as o:
while linecount > 0:
o.write(f.readline())
linecount -= 1
答案 1 :(得分:1)
方法Id
需要一个包含输入参数delayed
且返回类型为Int
的函数
但是在您的示例中,您传递的是Int
函数的结果。
这将解决您的问题。
time