Scala 私有(private)应用方法?

标签 scala methods apply private

我目前正在制作一个可以存储英语单词的类。我想让它尽可能安全(如果输入无效 - 返回错误消息),这就是我迷路的地方。我有这段存储英文单词的代码:

  case class English_LT_Word private (word: String)
  object English_LT_Word {
    def apply(word: String) = new English_LT_Word(word)
    def createNewWord(word: String): Either[String, English_LT_Word] = {
      if (word.length > 0 && word.forall(x=>consonants.contains(x) || vowels.contains(x))) Right(apply(word))
      else Left("'" + word + "'" + " is an invalid word")
    }
  }

在这个例子中,我可以像这样创建任何英文单词:

val english = English_LT_Word.apply("Awesome")
val english = English_LT_Word.createNewWord("Awesome")

在这里,我对使用什么感到困惑,但它并不漂亮。我该如何正确地做到这一点?将 .apply() 方法设为私有(private)是不可能的,因为(长话短说)编译器将不同步。我只想使用 .createNewWord() 方法来创建我的单词。有什么想法吗?

谢谢!! ^^

最佳答案

您可以使用 -Xsource:2.12 定义 2.12 或 2.11 下的自定义案例伴侣应用。

$ ~/scala-2.11.12/bin/scala -Xsource:2.12 
cat: /usr/lib/jvm/jdk1.8.0/release: No such file or directory
Welcome to Scala 2.11.12 (OpenJDK 64-Bit Server VM, Java 1.8.0_181).
Type in expressions for evaluation. Or try :help.

scala> :pa
// Entering paste mode (ctrl-D to finish)

import scala.util._

case class Word private (text: String)
object Word {
  def apply(s: String): Either[String, Word] =
    if (s.nonEmpty) Right(new Word(s)) else Left("Empty word!")
}

// Exiting paste mode, now interpreting.

import scala.util._
defined class Word
defined object Word

scala> Word("")
res0: scala.util.Either[String,Word] = Left(Empty word!)

scala> Word("ok")
res1: scala.util.Either[String,Word] = Right(Word(ok))

关于Scala 私有(private)应用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51790659/

相关文章:

java - java中iterator()方法的返回类型

scala - 在运行时将 Scala 3 代码从字符串解析为 Scala 3 AST

java - Scala.Byte vs java.lang.Byte - 推荐使用哪个?

java - 执行 io 时 akka jvm 线程与 os 线程

scala - 为什么 mapPartitions 不向标准输出打印任何内容?

java - 哪个类可以访问我的方法?

java - 重复与现有

r - 使用 R 将函数应用于数据框中两列的每个组合

javascript - 在 JavaScript 中使用参数调用 apply 方法

r - 将 MIN 和 MAX 组合成 R 中的 rowise 函数