相关疑难解决方法(0)

查找列表标量中元素的索引

如何在Scala列表中找到元素的索引.

val ls = List("Mary", "had", "a", "little", "lamb")
Run Code Online (Sandbox Code Playgroud)

如果我要求"小"的索引,我需要得到3

scala list

46
推荐指数
3
解决办法
6万
查看次数

为什么变量不能是稳定的标识符?

下列

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.我猜"因为"是一个可以接受的答案,但我觉得我错过了更深层次的原因.

scala

36
推荐指数
3
解决办法
2万
查看次数

Scala中`def`和`val`的不同类型推断

我在应用于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 type-inference

18
推荐指数
1
解决办法
451
查看次数

Scala语法奇怪与::并要求小写

这应该发生吗?

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)

它似乎区分大小写.错误或"功能"?

syntax scala

6
推荐指数
1
解决办法
125
查看次数

非文字值的模式匹配

我觉得这是一个愚蠢的问题,但无论如何我都会问......我正在尝试这样做:

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-2.10

4
推荐指数
1
解决办法
1510
查看次数

在 Scala 中使用稳定标识符的后果是什么?

在 Scala 中,我听说如果标识符以大写字母开头或被反引号包围,则它是“稳定的”。标识符在 Scala 中保持稳定意味着什么?这有什么副作用?最后,这是否与static final建议常量(如在 Java 中)以大写字母开头的约定有关?

scala identifier

2
推荐指数
1
解决办法
551
查看次数

如何在Scala中匹配Char?

好的,这听起来像一个琐碎的问题。

  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,为什么会中断?

scala

2
推荐指数
1
解决办法
234
查看次数

是否可以将匹配scala操作与变量一起使用?

可能重复:
为什么Scala中的模式匹配不适用于变量?
范围内变量的模式匹配(Scala)

例如,我有代码

def equals(value1:String, value2:String) = value1 match {
 case value2 => true
 case _ => false
}
Run Code Online (Sandbox Code Playgroud)

我找到了解决方法,但我并不喜欢语法

def equals(value1:String, value2:String) = value1 match {
 case v if v == value2 => true
 case _ => false
}
Run Code Online (Sandbox Code Playgroud)

scala pattern-matching

1
推荐指数
1
解决办法
690
查看次数