Scala:如何访问在其他代码块中定义的方法中的变量
Scala: how to access variables in a method defined in some other block of code
我有以下代码:
.hof((key, value) => {
Some(..some processing result on key,value)
.filterNot(_.isEmpty)
.map(x: X => {....my code processing x using key,value with output y})
}
)
我想抽象出我传递给映射到 class 中定义的方法的函数。
def myMethod(x: X) = {
y = ....some computation....
return y
}
但我需要访问 myMethod 中的键值。
有办法吗?
您可以用柯里化形式定义 myMethod
:
def myMethod(key: Key, value: Value)(x: X) = {
... uses key and value ...
}
然后您可以在 map
中部分应用它,将它传递给您当时拥有的 key/value 对:
.map(myMethod(key, value))
请注意,将 key/value 对添加到 myMethod
签名并不是某种 "cheating";如果该方法需要使用键和值,则应将它们作为参数传递。
这就是 FP 的伟大之处;一旦每个函数都声明了它所操作的所有参数,您就可以轻松地组合它们。
当然,您可以简单地将 myMethod
放置在 key
和 value
可以访问的范围内的某处(=闭包),但是通过将它们声明为参数,您更灵活,您可以将方法放在任何您想要的地方。
您可以像这样在本地定义方法:
.hof((key, value) => {
def myMethod(x: X) = {
???
}
Some(..some processing result on key,value)
.filterNot(_.isEmpty)
.map(myMethod)
}
)
否则你将不得不将 (key, value)
作为参数传递给函数。
(请参阅@slouc 的回答以获取有关如何使用柯里化使此更清洁的技巧)
我有以下代码:
.hof((key, value) => {
Some(..some processing result on key,value)
.filterNot(_.isEmpty)
.map(x: X => {....my code processing x using key,value with output y})
}
)
我想抽象出我传递给映射到 class 中定义的方法的函数。
def myMethod(x: X) = {
y = ....some computation....
return y
}
但我需要访问 myMethod 中的键值。
有办法吗?
您可以用柯里化形式定义 myMethod
:
def myMethod(key: Key, value: Value)(x: X) = {
... uses key and value ...
}
然后您可以在 map
中部分应用它,将它传递给您当时拥有的 key/value 对:
.map(myMethod(key, value))
请注意,将 key/value 对添加到 myMethod
签名并不是某种 "cheating";如果该方法需要使用键和值,则应将它们作为参数传递。
这就是 FP 的伟大之处;一旦每个函数都声明了它所操作的所有参数,您就可以轻松地组合它们。
当然,您可以简单地将 myMethod
放置在 key
和 value
可以访问的范围内的某处(=闭包),但是通过将它们声明为参数,您更灵活,您可以将方法放在任何您想要的地方。
您可以像这样在本地定义方法:
.hof((key, value) => {
def myMethod(x: X) = {
???
}
Some(..some processing result on key,value)
.filterNot(_.isEmpty)
.map(myMethod)
}
)
否则你将不得不将 (key, value)
作为参数传递给函数。
(请参阅@slouc 的回答以获取有关如何使用柯里化使此更清洁的技巧)