Scala - 如何使用接收对象作为参数的构造函数创建 class

Scala - How to create a class with a constructor that receives an object as parameter

我在 Scala 中有两个 classes - 一个是另一个的 属性。我想为父 class 创建一个智能构造函数,但我真的不知道什么是最佳实践。我做了一些研究,但没有找到令人满意的 solution/explanation。

这是我的class。

final class Role(role: String) //child

object Role:
  def isRoleValid(role: String): Boolean =
    val pattern = "([a-zA-Z])+".r
    pattern.matches(role)
      
  def newRole(role: String): Role = Role(role)
    
  def from(role: String): Option[Role] =
    if(isRoleValid(role)) Some(newRole(role))
    else None
final class NurseRequirement(role: Role, number: Int) //Parent

object NurseRequirement:
  def isNumberValid(number: Int): Boolean = number > 0
  //What should I do to validate the Role object??

我强烈怀疑你真的想要这样的伴生对象:

  def from(s: String, n: Int): Option[NurseRequirement] =
    if isNumberValid(n) 
    then Role.from(s).map(NurseRequirement(_, n))
    else None

如果您遇到有更多此类可选子组件的情况,您可以使用 Option 上的 for-comprehensions 摆脱嵌套的 if,即类似于:

  def from(s: String, n: Int) =
    for
      r <- Role.from(s)
      m <- Option(n).filter(isNumberValid)
    yield NurseRequirement(r, m)