【发布时间】:2014-11-28 17:00:50
【问题描述】:
我想编写一个案例类,它可以接收一个具有一个或多个 Ints 作为其参数的函数。例如,这些是有效的函数:
def foo(x: Int): String = "foo"
def bar(x: Int, y: Int): String = "bar"
def foobar(x: Int, y: Int, z: Int): String = "foobar"
但这不会:
def nonExample():String = "no"
问题是我无法为我的案例类获取正确的参数类型。
case class Mine(function: ???) {}
我试过了:
case class Mine(function: (Int*) => String)
这不起作用,因为 (Int*) 是 Ints 的序列。我也尝试过使用 Function 和 Function1,但这也不起作用。任何想法(或替代方案,如果这在 Scala 中是不可能的)?
编辑: 正如 Didier Dupont 所提到的,Mine 还需要知道该方法需要多少个参数。上面我过度简化了Mine。它还将接受另一个参数来说明传入的函数。基于此,它将决定将多少个参数传递给函数。但除了那段代码之外,Mine 中的其他所有内容都与功能无关。
【问题讨论】:
-
我的第一个想法是这是不可能的,但 Scala 总是让我感到惊讶。 :)
-
-
顺便说一句,方法不能传递,函数可以。
-
那你打算怎么使用Mine类呢?由于您不知道该方法需要多少参数,因此很难调用它。
-
case 类通常意味着比任何东西都更有价值的容器,一个完美的例子是
Either类型。它有Left和Right作为它的可能值,每个值只应该包含一个值。与自身具有多个单参数版本的事物进行模式匹配没有多大意义,因为在擦除后它们最终看起来都一样
标签: scala