Scala:以动态契约作为参数的函数

时间:2016-09-06 12:45:55

标签: scala function constructor enums

我有以下枚举。

object Smth extends Enumeration {
    class Value(name: String, func: (String, Int) => Boolean) extends super.Val(name)

    private def opA(index: Int) : Boolean ={
      index > 0
    }
    private def opB(x: String, index: Int) : Boolean ={
      index > 0 && x.length > 0
    }

    val x = new Value("X", opA) // type mismatch error for opA
    val y = new Value("Y", opB)
}

Enum构造函数将(String, Int) => Boolean类型的函数作为参数。是否可以创建枚举构造函数,使其接受具有2个不同契约的函数,例如:

(String, Int) => Boolean
(Int) => Boolean

我试图避免在函数定义中使用参数的默认值。

这就是我想要的方式。

if(Smth.x.func(0)) { do smth }
else if(Smth.y.func("str", 0)) { do smthElse }

1 个答案:

答案 0 :(得分:0)

如果您只想要默认值,可以这样做:

class Value(val name: String, val func: (String, Int) => Boolean) extends super.Val(name) { 
    def apply(name: String, func: (Int) => Boolean): Value = 
        new Value(name, (x -> func("default value", x))) 
}