相关疑难解决方法(0)

Scala匹配+范围的问题

给出以下代码:

case class ChangeSet(field:String, from:Object, to:Object)

private var changed:List[ChangeSet] = Nil

def change(field:String, from:Object, to:Object) {
  changed.find{ case ChangeSet(field,_,_) => true } match {
    case Some(ChangeSet(field,to,_)) => // do stuff
    case Some(_) => // do stuff
    case _ => // do stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

给我带来麻烦的是Some(ChangeSet(field,to,_)).

它编译但似乎正在发生的事情是Scala将其填充为通配符的占位符.我的假设基于以下事实:当我执行以下操作时,Some(ChangeSet(field,to,to))我得到了错误to is already defined as value.

我想要的是to从方法参数创建一个ChangeSet对象.

那可能吗?

scala pattern-matching

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

为什么scala在给出这个模式匹配的积分值时会抱怨?

目标:编写一个函数,生成一个新的String,不包括指定的字符(由索引标识)

示例:

  • takeAllExcept(0, "abc") 回报 bc
  • takeAllExcept(1, "abc") 回报 ac
  • takeAllExcept(2, "abc") 回报 ab

我最初做了什么:

def takeAllExcept( index: Int, s: String ): String = {
  val lastIndex = s.length()-1
  index match {
    case 0 => return s.slice(1, s.length)
    case lastIndex => return s.slice(0, s.length()-1)
    case _ => { s.slice(0, index) + s.slice(index+1, s.length) }
  }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨语句块case _无法访问.

我是如何修理它的

def takeAllExcept( index: Int, s: String ): String = {
  val lastIndex = s.length()-1
  if( index …
Run Code Online (Sandbox Code Playgroud)

scala pattern-matching

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

是否可以将匹配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
查看次数

标签 统计

pattern-matching ×3

scala ×3