如何在Scala列表中找到元素的索引.
val ls = List("Mary", "had", "a", "little", "lamb")
Run Code Online (Sandbox Code Playgroud)
如果我要求"小"的索引,我需要得到3
下列
def mMatch(s: String) = {
var target: String = "a"
s match {
case `target` => println("It was " + target)
case _ => println("It was something else")
}
}
Run Code Online (Sandbox Code Playgroud)
不编译:
错误:需要稳定的标识符,但找到了目标.case
target=> println("它是"+目标)
为什么Scala需要val不是a var.我猜"因为"是一个可以接受的答案,但我觉得我错过了更深层次的原因.
我在应用于def和时观察到Scala类型推断的差异val.
使用def,我可以定义一个const返回类型值的抽象nullary方法Int => Int.const使用函数文字实现时,我不需要提供参数类型,因为它可以由编译器推断:
trait D {
def const: Int => Int
}
object D extends D {
def const = i => i + 1
}
Run Code Online (Sandbox Code Playgroud)
这可以.(在缺点方面,正在为每次访问创建一个新的函数实例D.const.)
现在考虑一个类似的结构使用val:
trait V {
val const: Int => Int
}
object V extends V {
val const = i => i + 1
}
Run Code Online (Sandbox Code Playgroud)
这将无法编译,失败
error: missing parameter type
val const = i => i + …Run Code Online (Sandbox Code Playgroud) 这应该发生吗?
scala> val myList = List(42)
myList: List[Int] = List(42)
scala> val s2 :: Nil = myList
s2: Int = 42
scala> val S2 :: Nil = myList
<console>:8: error: not found: value S2
val S2 :: Nil = myList
^
Run Code Online (Sandbox Code Playgroud)
它似乎区分大小写.错误或"功能"?
我觉得这是一个愚蠢的问题,但无论如何我都会问......我正在尝试这样做:
def func(x: Int, y: Int) = {
val value: Int = 0 //from config
(x, y) match {
case (value, value) => "foo"
case _ => "bar"
}
}
Run Code Online (Sandbox Code Playgroud)
但是repl和intelliJ都警告我.(例如"变量模式后的模式不匹配";"可变模式的可疑模糊"等).是否有正确的方法来匹配非文字值?
在 Scala 中,我听说如果标识符以大写字母开头或被反引号包围,则它是“稳定的”。标识符在 Scala 中保持稳定意味着什么?这有什么副作用?最后,这是否与static final建议常量(如在 Java 中)以大写字母开头的约定有关?
好的,这听起来像一个琐碎的问题。
val delim = ','
val chars = "abc,def".toCharArray
var i = 0
while (i < chars.length) {
chars(i) match {
case delim =>
println(s"($i): D!")
case c =>
println(s"($i): $c")
}
i += 1
}
Run Code Online (Sandbox Code Playgroud)
我很困惑,它的输出是:
(0): D!
(1): D!
(2): D!
(3): D!
(4): D!
(5): D!
(6): D!
Run Code Online (Sandbox Code Playgroud)
我期望这样:
(0): a
(1): b
(2): c
(3): D!
(4): d
(5): e
(6): f
Run Code Online (Sandbox Code Playgroud)
如何匹配Char值?
注意: 如果我改为硬连接delim char“ case','=>”,则按预期运行!如果使用Char类型的val,为什么会中断?
例如,我有代码
def equals(value1:String, value2:String) = value1 match {
case value2 => true
case _ => false
}
Run Code Online (Sandbox Code Playgroud)
我找到了解决方法,但我并不喜欢语法
Run Code Online (Sandbox Code Playgroud)def equals(value1:String, value2:String) = value1 match { case v if v == value2 => true case _ => false }