我有一些像這樣的代碼:
case class FunctionCommand[A](function: Function1[Array[A], Unit])
class MyClass(commands: List[FunctionCommand[_]]) {
def foo(parametersForEachFunction: Seq[Array[_]]) {
assert(commands.size == parametersForEachFunction.size)
for ((command, parameter) <- commands zip parametersForEachFunction) {
command.function(parameter)
}
}
}
而且這不會編譯:
MyClass.scala:7: type mismatch;
found : Array[(some other)_0(in value $anonfun)] where type (some other)_0(in value $anonfun)
required: Array[_0(in value $anonfun)] where type _0(in value $anonfun)
command.function(parameter)
^
我不知道什麼是Array[(some other)_0(in value $anonfun)]
。我可以寫一些類似command.function(parameter.asInstanceOf[????])
的文件來編譯它嗎?
我有一個解決方法。我將command.function(parameter)
更換爲:
def forceInvoke[A](command: FunctionCommand[A], parameter: Any) {
command.function(parameter.asInstanceOf[A])
}
forceInvoke(command, parameter)
然後編譯。
但我仍然想知道是否有方法將parameter
轉換爲行內正確的類型。
使用您的解決方法。你的目標是使Scala類型系統能夠克服你想要的靈活性。 – huynhjl 2012-03-01 08:03:18
你不能丟失類型,然後想要回來。如果你想要類型,不要在任何地方使用'_'。如果你想要一個不同的已知類型的列表,那麼你需要一個'HList'。在這種情況下請參閱[無形](https://github.com/milessabin/shapeless)。 – 2012-03-01 16:25:04
我是一名工程師,而不是數學家。我的鍵盤上沒有「λ」,「ℤ」,「⊤」等。 – 2012-03-02 04:05:35