是否可以从类中分离方法?
class A {
def b(C): D
}
是否有一个函数需要b
并返回一个函数
签名A => C => D
或(A,C) => D
?
答案 0 :(得分:2)
通常没有必要从具有单个参数的方法显式创建新的二进制函数,因为当编译器需要这样的函数类型时,您可以使用_ methodName _
中缀运算符语法来表示匿名函数。 / p>
第一个_
取代目标对象(A的实例),第二个_
取代该方法的参数。
例如,如果您有潜在的使用网站
def swizzle(f: (A, C) => D) = sys.error("todo")
然后你可以像这样引用方法b
:
swizzle(_ b _)
答案 1 :(得分:1)
我不知道有关这样做的功能,但很容易创建这样的功能:
val f: A => C => D = a => c => a b c
答案 2 :(得分:0)
这个概念被称为 eta扩展。以下是Scala语言规范的相关部分:
以下四种隐式转换可以应用于不是的方法 适用于某些参数列表。
<强>评价即可。类型m
的无参数方法=> T
始终转换为类型
T
通过评估m
绑定的表达式。
隐式应用。如果该方法仅采用隐式参数,则遵循§7.2。
Eta扩展。否则,如果方法不是构造函数,那么就是预期的
type pt是一个函数类型(Ts ) ⇒ T
,对eta-expansion(§6.26.5)执行
表达e
。
清空申请。否则,如果e
具有方法类型()T
,则会隐式应用它
空参数列表,产生e()
。