首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala:如何传递字符串变量来访问对象值?

Scala:如何传递字符串变量来访问对象值?
EN

Stack Overflow用户
提问于 2020-01-22 13:19:12
回答 2查看 200关注 0票数 0

我有一个物体

代码语言:javascript
运行
复制
object Constants {
  val getA = "example.a.test"
  val getB = "example.b.test"
  val getC = "example.c.test"
        .
        .
        .
}

我有另一个类,在if-else循环中导入类后,我将在其中访问这些值

代码语言:javascript
运行
复制
if(str == "A") {
   println(Constants.getA)
}
else if (str == "B") {
   println(Constants.getB)
} else {
   println(Constants.getC)
}
// and so on...

注意:这只是我的示例代码,但是if-else循环会变得很复杂。有没有一种方法可以通过将"str“变量直接传递给对象来简化这一过程,比如"Constants.get$str”或其他更简单的方法?我收到圈复杂度Scala检查样式警告

EN

回答 2

Stack Overflow用户

发布于 2020-01-22 13:23:08

您可以使用模式匹配并在常量中创建一个新函数。

代码语言:javascript
运行
复制
def getString(str: String) = {
 str match {
  case "A" => "example.a.test"
  case "B" => "example.b.test"
  case "C" => "example.c.test"
  case _ => "Wrong input"
 }
}
票数 2
EN

Stack Overflow用户

发布于 2020-01-22 13:46:40

您可以使用键/值对象来处理代码

例如,使用Map:

代码语言:javascript
运行
复制
object Constants {
val get = Map("A" -> "example.a.test", "B" -> "example.b.test", "C" -> "example.c.test" , ...)
}

您可以通过以下方式使用它

代码语言:javascript
运行
复制
println( get("A"))

而不是你所拥有的所有if else循环。您甚至还可以对键或值进行迭代:

代码语言:javascript
运行
复制
  get.keys.foreach{ i =>  
     print( "Key = " + i )
     println(" Value = " + get(i) )}

我认为这种方法可以更简单,我希望答案是有用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59853079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档