Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/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
如何在Scala中将函数名传递给Case Match语句_Scala - Fatal编程技术网

如何在Scala中将函数名传递给Case Match语句

如何在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

我是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 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