将包含链式函数调用的枚举传递给for…在Scala中产生理解
在Scala中,for…yield语句非常适合将一系列函数调用链接在一起,以使用monad实践定义转换图。但是,我希望在函数作用域之外定义函数调用,并动态地传递它们,以便链接函数调用可以由另一个应用程序定义,并使用字符串作为参数传递 根据for…使用的数据类型,yield是枚举,但我只能找到硬编码的枚举示例 有没有办法动态生成枚举并将其传递到for…yield语句中 例如,给定此工作代码:将包含链式函数调用的枚举传递给for…在Scala中产生理解,scala,monads,enumeration,for-comprehension,Scala,Monads,Enumeration,For Comprehension,在Scala中,for…yield语句非常适合将一系列函数调用链接在一起,以使用monad实践定义转换图。但是,我希望在函数作用域之外定义函数调用,并动态地传递它们,以便链接函数调用可以由另一个应用程序定义,并使用字符串作为参数传递 根据for…使用的数据类型,yield是枚举,但我只能找到硬编码的枚举示例 有没有办法动态生成枚举并将其传递到for…yield语句中 例如,给定此工作代码: import scala.util.Try val map1: Map[String, Int] = M
import scala.util.Try
val map1: Map[String, Int] = Map("val1"->1,"val2"->2,"val3"->3)
def mapTest(inputMap: Map[String, Int]) = {
for {
x <- Try(inputMap.mapValues(_ * 2))
y <- Try(x.mapValues(_ * 2))
z <- Try(y.mapValues(_ *2))
} yield z
}
mapTest(map1).get
导入scala.util.Try
valmap1:Map[String,Int]=Map(“val1”->1,“val2”->2,“val3”->3)
def mapTest(inputMap:Map[String,Int])={
为了{
x 3)
val functionList:String=“(x将函数作为字符串传入的唯一方法似乎是使用运行时编译,如以下示例所示:
这里还有更多示例:请提供一个链接,指向将a与枚举类型关联起来的文档。
的…yield
实际上是map()
和flatMap()的语法糖
chain。不涉及Enum
。就在这里:它扩展为一个平面图,如示例“a用于理解”所示,但我不知道如何表示p啊,我看到你的困惑了。术语枚举数
是一种语言规范。标准库中没有枚举数
类型,就像没有Expr1
类型或生成器
类型一样。这些术语用于构建语言描述。明白了,所以没有办法传入生成器表达式到for…yield的内部部分?听起来解决方案更接近这个代码生成器示例?这是否回答了您的问题?
import scala.util.Try
val map1: Map[String, Int] = Map("val1"->1,"val2"->2,"val3"->3)
val functionList: String = "(x <- Try(inputMap.mapValues(_ * 2))),(y <- Try(x.mapValues(_ * 2))),(z <- Try(y.mapValues(_ *2)))"
def mapTest(inputMap: Map[String, Int], functionList: String) = {
for {functionList.toEnum} yield z
}
mapTest(map1).get
val functionString = s"""
def mapTest(inputMap: Map[String, Int]) = {
| for {
| x <- Try(inputMap.mapValues(_ * 2))
| y <- Try(x.mapValues(_ * 2))
| z <- Try(y.mapValues(_ *2))
| } yield z
|}""".stripMargin