鉴于此代码:
def getFunc(funcName:String, param:Int) = match funcName {
case "FooFunc" => FooFunc(param)
[...]
}
def FooFunc(param:Int) = param + SomeObject.SomeVariable
我如何在申请FooFunc
的情况下退回param
,不用评估呢?我想要这样做的原因是因为你可以看到FooFunc
依赖于一个外部变量,所以我希望能够在已经应用param
的情况下调用它。 getFunc
的返回类型需要什么?
答案 0 :(得分:5)
易:
def getFunc(funcName: String, param: Int) = funcName match {
case "FooFunc" => () => FooFunc(param)
[...]
}
你的方法有一个好名字:getFunc
应该返回一个函数,所以它会。
答案 1 :(得分:2)
必须在Scala中的调用站点定义惰性。你可以这样做:
lazy val x = getFunc(...) // getFunc only gets evaluated when needed
或者您可以更改签名:
def FooFunc(param:Int) = () => param + SomeObject.SomeVariable
...
val x = getFunc(...) // x contains a function from Unit into something
x() // Use x here, causing the evaluation
答案 2 :(得分:1)
您可以添加另一个void参数,因此仅在将该函数应用于此参数时对其进行求值。
虽然在这种情况下我宁愿使用适当的对象而不是函数。
答案 3 :(得分:1)
我确定有很多选择,但您可以使用:
return { Unit => FooFun(param) }