如何在Scala中将函数名传递给Case Match语句
我是Scala Programmaing的新手,尝试创建Case Match或Switch Case语句,inturn根据输入值调用不同的函数 例如,请参阅示例代码片段。希望它能解释我打算做什么如何在Scala中将函数名传递给Case Match语句,scala,Scala,我是Scala Programmaing的新手,尝试创建Case Match或Switch Case语句,inturn根据输入值调用不同的函数 例如,请参阅示例代码片段。希望它能解释我打算做什么 def getValue(x: Any):String = x match { case "Value1"=> Function1(int) case "Value2"=> Function2(int) case _ => println("This is an invalid val
def getValue(x: Any):String = x match {
case "Value1"=> Function1(int)
case "Value2"=> Function2(int)
case _ => println("This is an invalid value")
}
def Function1(int) {
Do Something
}
def Function2(int) {
Do Something
}
当我这样给出时,我得到一个错误,如下所示:
Error:(26, 34) type mismatch;
found : Unit
required: String
case "Value1"=> Function1(int)
编辑:
将getValue的返回类型修改为“单位”而不是“字符串”。现在此错误已解决,但我收到以下错误消息
错误:(26,22)正向引用超出了值的定义
火花
案例“Value1”=>Function1(int)
修改的代码段
def getValue(x: Any):Unit = x match {
case "Value1"=> Function1(int)
case "Value2"=> Function2(int)
case _ => println("This is an invalid value")
}
def Function1(int) {
Do Something
}
def Function2(int) {
Do Something
}
我通过在代码末尾保留spark变量的声明来解决这个错误 问题是您的
Function1
和Function2
(可怕的名称!)返回Unit
,并且getValue
被声明为返回字符串
函数的声明类似于def functionName(args):ReturnType={…}
可以省略其中的某些部分,然后假定为默认值。
在您的例子中,您省略了ReturnType
声明,以及(更重要的是)=
符号。当函数体前面没有=
时,函数将始终返回单元
。如果希望它返回字符串
,则需要在正文前添加=
,并确保正文中的最后一条语句确实是字符串
此外,默认的
case
子句不返回任何内容。这不起作用,因为再次声明getValue
返回一个字符串。在这种情况下,您需要抛出一个异常,或者考虑返回一个默认值(空字符串?),或者像另一个答案所建议的那样,使用选项。问题是您的函数1
和函数2
(可怕的名称!)返回单元,并且getValue
被声明为返回String
函数的声明类似于def functionName(args):ReturnType={…}
可以省略其中的某些部分,然后假定为默认值。
在您的例子中,您省略了ReturnType
声明,以及(更重要的是)=
符号。当函数体前面没有=
时,函数将始终返回单元
。如果希望它返回字符串
,则需要在正文前添加=
,并确保正文中的最后一条语句确实是字符串
此外,默认的case
子句不返回任何内容。这不起作用,因为再次声明getValue
返回一个字符串。在这种情况下,您需要抛出一个异常,或者考虑返回一个默认值(空字符串?),或者使用选项,就像另一个答案所建议的那样。函数1和函数2应该返回字符串。此外,您不能使用println,因为它的结果是Unit,在这种情况下,您可以抛出一个异常:
def getValue(x: Any):Unit = x match {
case "Value1"=> function1(1)
case "Value2"=> function2(2)
case _ => throw new IllegalArgumentException("This is an invalid value")
}
def function1(v: Int): String = {
// SOME STUF THAT RETURNS STRING
}
def function2(v: Int): String = {
// SOME STUF THAT RETURNS STRING
}
函数1和函数2应返回字符串。此外,您不能使用println,因为它的结果是Unit,在这种情况下,您可以抛出一个异常:
def getValue(x: Any):Unit = x match {
case "Value1"=> function1(1)
case "Value2"=> function2(2)
case _ => throw new IllegalArgumentException("This is an invalid value")
}
def function1(v: Int): String = {
// SOME STUF THAT RETURNS STRING
}
def function2(v: Int): String = {
// SOME STUF THAT RETURNS STRING
}
在这个问题上与Apache Spark有什么关系?case\u=>println(…)
无法匹配预期的:String
返回值type@AKSW我假设每当我问与Scala相关的问题时,我也必须标记ApacheSpark。如果我是,我道歉wrong@cchantep谢谢你的回复。这就像一个伪代码。不是实际的代码。我只是描述了我打算做什么。任何关于在没有条件匹配时如何传递字符串的帮助对我都更有用。@JKC Scala是一种编程语言,Apache Spark是一种分布式处理框架。如果您有一个Scala问题,显然没有必要将其标记为Spark。当您对与Spark相关的代码有疑问时,请使用Spark标记。在这个问题中与Apache Spark有什么关系?case\u=>println(..)
无法匹配预期的:String
返回值type@AKSW我假设每当我问与Scala相关的问题时,我也必须标记ApacheSpark。如果我是,我道歉wrong@cchantep谢谢你的回复。这就像一个伪代码。不是实际的代码。我只是描述了我打算做什么。任何关于在没有条件匹配时如何传递字符串的帮助对我都更有用。@JKC Scala是一种编程语言,Apache Spark是一种分布式处理框架。如果您有一个Scala问题,显然没有必要将其标记为Spark。如果您对Spark相关代码有疑问,请使用Spark标签。谢谢您的回复。函数1和函数2不应返回字符串。它应该执行一些功能。感谢您的回复。函数1和函数2不应返回字符串。它应该执行一些功能。嗨@Dima。谢谢你宝贵的回复。我的函数不应该返回字符串。它应该执行一些操作。我这里的问题是如何根据输入值导航到特定的函数体,输入值将是字符串值。我的要求是我必须在case match语句中传递这个字符串,然后它应该将我带到特定的函数体。我修改了getValue定义以返回一个单位。但它仍然不能正常工作。更新了问题hi@Dima。谢谢你宝贵的回复。我的函数不应该返回字符串。它应该执行一些操作。我这里的问题是如何根据输入值导航到特定的函数体,输入值将是字符串值。我的要求是我必须在case match语句中传递这个字符串,然后它应该将我带到特定的函数体。我修改了g