我正在尝试实现几个函数,它们将采用两个相同类型的对象[A],一个阈值,在两个对象上调用类型[A]的成员函数,将结果与阈值进行比较以返回布尔值。
作为一个具体的例子,比方说,[A]有几个返回int
s的成员函数。我更喜欢创建一个函数工厂,它接受这样一个成员函数,fn,两个对象,a和b,类型为[A],阈值为thresholdFn,并返回一个函数,其主体为(a.fn + b) .fn> thresholdFn)。是否可以创建一个工厂fn,如:
def myFn(
a: MyObject,
b: MyObject,
getter: <<<MyObject getter function>>>,
int threshold): Boolean = {
def myFn1(...) {
(<<< a.getter + b.getter >>>) > threshold
}
myFn1
}
[A]是一个外部Java类。
答案 0 :(得分:2)
你不能以这种方式做到这一点。您可以创建一个函数并使用它:getter(a)
。
def myFn(a: MyObject, b: MyObject, getter: MyObject => Int, int threshold): Boolean = {
(getter(a) + getter(b)) > threshold
}
用法:
myFn(a, b, _.fn, threshold)
如果您要抽象a
和b
类型,则应将getter
移至其他参数组:
def myFn[T](a: T, b: T, int threshold)(getter: T => Int): Boolean = {
(getter(a) + getter(b)) > threshold
}
myFn(a, b, threshold){ _.fn }