Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将包含链式函数调用的枚举传递给for…在Scala中产生理解_Scala_Monads_Enumeration_For Comprehension - Fatal编程技术网

将包含链式函数调用的枚举传递给for…在Scala中产生理解

将包含链式函数调用的枚举传递给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

在Scala中,for…yield语句非常适合将一系列函数调用链接在一起,以使用monad实践定义转换图。但是,我希望在函数作用域之外定义函数调用,并动态地传递它们,以便链接函数调用可以由另一个应用程序定义,并使用字符串作为参数传递

根据for…使用的数据类型,yield是枚举,但我只能找到硬编码的枚举示例

有没有办法动态生成枚举并将其传递到for…yield语句中

例如,给定此工作代码:

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