首页 > 解决方案 > 没有名字的Scala数组

问题描述

这是我如何检查一个数字在 Ruby 中是偶数/奇数的方法:

def even_or_odd(number)
  ['Even', 'Odd'][number % 2]
end

我在 Scala 中最接近的是:

  def evenOrOdd(number: Int): String = {
     val a = Array("Even", "Odd")
     a(number % 2)
  }

我真正想做的是这样的,但它不会编译:

  def evenOrOdd(number: Int): String = {
    ("Even", "Odd")(number % 2)
  }

首先,这种“匿名”结构叫什么?其次,什么是优雅的使用方式?如果你有一个类似的例子来说明 Scala 的强大/简洁/清晰,我很想看看。

标签: arraysscala

解决方案


("Even", "Odd")是类型,它是它的访问器(String,String)的别名,并且Tuple2[String, String]._1._2

你可以做Array("Even", "Odd")(number % 2)或编辑:正如评论中指出的那样,这实际上不起作用。这将虽然Array("Even", "Odd").apply(number % 2)

number % 2 match {
    case 0 => "Even"
    case 1 => "Odd"
    case -1 => "Odd" //EDIT: as per comment. I forgot about this case
}

推荐阅读