如何在符号中检查字符串是否在Scala中以功能方式列入白名单?

Iva*_*van 4 string scala

我需要保证字符串只包含允许的符号.现在我这样做:

def isCorrect(s: String, allowedChars: String): Boolean = {
  s.distinct.foreach(c => {
    if (!allowedChars.contains(c))
      return false
  })

  true
}
Run Code Online (Sandbox Code Playgroud)

不用说这看起来不太漂亮.有没有更好,更实用的方法来做到这一点?

Tra*_*own 19

对于记录,您可以通过不限制自己的字符串来使这更加通用,并通过切换参数的顺序和使用两个参数列表来更加功能(在我看来).这是我写的方式:

def isCorrect[A](allowed: Set[A])(s: Seq[A]) = s forall allowed
Run Code Online (Sandbox Code Playgroud)

现在,您可以将此方法视为一个函数,并"部分应用"它以创建更专业的函数:

val isDigits = isCorrect("0123456789".toSet) _
val isAs = isCorrect(Set('A')) _
Run Code Online (Sandbox Code Playgroud)

这允许您执行以下操作:

scala> isDigits("218903")
res1: Boolean = true

scala> isAs("218903")
res2: Boolean = false

scala> isDigits("AAAAAAA")
res3: Boolean = false

scala> isAs("AAAAAAA")
res4: Boolean = true
Run Code Online (Sandbox Code Playgroud)

或者你仍然可以使用类似的东西isCorrect("abcdr".toSet)("abracadabra").

  • 只是醒来,便士下降了,感谢一个具体的"有用的"部分应用的例子,特拉维斯. (2认同)