gpt4 book ai didi

scala - 在 Scala 中定义从字符串到函数的映射

转载 作者:行者123 更新时间:2023-12-04 01:43:15 24 4
gpt4 key购买 nike

我正在尝试使用键定义 Map 文字:String ,值:(Any)=>String .我尝试了以下操作,但出现语法错误:

def foo(x: Int): String = /...
def bar(x: Boolean): String = /...
val m = Map[String, (Any) => String]("hello" -> foo, "goodbye" -> bar)

最佳答案

有趣的是,实际上没有人给出一种有效的类型。这是一个这样的:

def foo(x: Int): String = x.toString
def bar(x: Boolean): String = x.toString
val m = Map[String, (Nothing) => String]("hello" -> foo, "goodbye" -> bar)

之所以这样工作是因为 Function1在输入上是逆变的,所以 (Nothing) => String(Int) => String 的父类(super class).它在输出上也是协变的,所以 (Nothing) => Any将是任何其他 Function1 的父类(super class).

当然,你不能那样使用它。如果没有 list ,您甚至无法发现 Function1 的原始类型是什么。是。不过,您可以尝试这样的操作:
def f[T : Manifest](v: T) = v -> manifest[T]
val m = Map[String, ((Nothing) => String, Manifest[_])]("hello" -> f(foo), "goodbye" -> f(bar))

val IntManifest = manifest[Int]
val BooleanManifest = manifest[Boolean]
val StringManifest = manifest[String]
m("hello")._2.typeArguments match {
case List(IntManifest, StringManifest) =>
m("hello")._1.asInstanceOf[(Int) => String](5)
case List(BooleanManifest, StringManifest) =>
m("hello")._1.asInstanceOf[(Boolean) => String](true)
case _ => "Unknown function type"
}

关于scala - 在 Scala 中定义从字符串到函数的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4617660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com