【发布时间】:2018-03-25 23:22:52
【问题描述】:
我有一个案例,我有一个可以取消特定项目(命令)资格的规则列表。每个规则都是一个高阶函数。 (为了可重用性)。
最后我需要验证是什么规则导致了失败。如何确定导致失败的规则?
有没有一种方法可以获取函数来自哪里的函数名称?
当我测试并返回导致失败的函数时,我得到一个非描述性的“”,它与实际返回的内容无关。
一个例子:
object Library {
def testIf5(v:Int): Boolean = { v==5}
}
class CommandVerifier {
def doesItFail(value: Int, rules: List[(Int)=>Boolean]) {
rules.find(r=> !r(value))
}
}
val expected = testIf5
val actaul = new CommandVerifier().doesItFail(5, List(testIf5))
actual should be expected (expected)
【问题讨论】:
-
您能否更具体地说明“验证”和“识别”的含义?以什么方式验证和识别?
-
在示例中,我试图与我期望返回的函数及其实际情况进行比较。我希望能够在那里进行比较。
-
另外,它出现在我的 IDE 中,它认为
.doesItFail的返回类型在分配给actaul时认为它是Unit。尝试将返回类型指定为Option[(Int) => Boolean]。def doesItFail(value: Int, rules: List[(Int)=>Boolean]): Option[(Int) => Boolean] = { rules.find(r => !r(value)) } -
另外,如果你想要在运行时的函数名,那是不可能的,因为函数在运行时没有名字。请参阅 stackoverflow.com/questions/44408880/… 和 stackoverflow.com/questions/33790311/…。我认为你应该独立测试这些规则。
-
这听起来就是答案。
标签: scala higher-order-functions