【问题标题】:See values of Class methods in Scala查看 Scala 中 Class 方法的值
【发布时间】:2013-07-22 19:13:55
【问题描述】:

我是 Scala 的新手,但在调试我的东西时遇到了麻烦。我正在阅读的书中有这个“测试”,以使用 familySize() 方法制作 Family 类。我的解决方案是这样的:

class Family(names:String*) {
  def familySize():Int = {
    args.length
  }
}
val family1 = new Family("Mom", "Dad", "Sally", "Dick")
family1.familySize() is 4

但是,这会产生错误:

scala:8: error: value is is not a member of Int
family1.familySize() is 4
                     ^
one error found

我的问题是,我不知道如何查看 args.length 等于什么。我尝试只做family1.familySize(),但是当我运行它时它不会返回任何东西。

【问题讨论】:

    标签: class scala


    【解决方案1】:

    args 不存在,是names

    class Family(names: String*) {
      def familySize(): Int = names.length
    }
    
    val family1 = new Family("Mom", "Dad", "Sally", "Dick")
    println(family1.familySize()) // will output 4
    

    您还可以避免将 names.length 周围的花括号作为单行符。

    【讨论】:

    • 很高兴它有帮助。如果这是您要查找的内容,请不要忘记标记已回答的问题。
    • 还不能。需要再等5分钟:)
    • 我们的速度太快了 :-)
    【解决方案2】:

    首先你没有args

    class Family(names: String*) {
      def familySize(): Int = names.length
    }
    

    你有几个选择:

    1) 简单的等式运算符

    val family1 = new Family("Mom", "Dad", "Sally", "Dick")
    family1.familySize() == 4
    

    2) 在Scalaz 中有一个类似于 JavaScript 的类型安全相等运算符:

    val family1 = new Family("Mom", "Dad", "Sally", "Dick")
    family1.familySize() === 4
    

    如果操作数有不同的类型则抛出异常

    3) 不同的测试库,例如:ScalatestSpecs2Scalacheck。例如在 ScalaTest 中必须匹配器:

    family1.familySize must equal (4)
    

    【讨论】:

    • 将 4 更改为 6 和相同的东西。 scala filename.scala 什么都不返回。
    猜你喜欢
    • 2020-01-29
    • 2011-02-12
    • 1970-01-01
    • 2011-02-18
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多