【问题标题】:Testing higher order functions in scala在scala中测试高阶函数
【发布时间】: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


【解决方案1】:

如果您希望在运行时获得函数名称,这是不可能的,因为函数在运行时没有名称。请参阅 scala get function name that was sent as paramHow do I get the function name in Scala?。我认为您应该独立测试这些规则

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多