代码之家  ›  专栏  ›  技术社区  ›  to.mane

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

  •  0
  • to.mane  · 技术社区  · 2 年前

    Igot Scala中有两个类-一个是另一个的属性。我想为父类创建一个智能构造函数,但我真的不知道最好的做法是什么。我做了一些研究,但没有找到令人满意的解决方案/解释。

    这是我的课程。

    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??
    
    0 回复  |  直到 2 年前
        1
  •  1
  •   Andrey Tyukin    2 年前

    我强烈怀疑您实际上想要这样的伴星对象:

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

    如果您遇到这样的情况,即您有更多这样的可选子组件,那么您可以去掉嵌套的 if 通过使用 for -对的理解 Option ,例如:

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