scala> List(1,2,3) == List(1,2,3)
res2: Boolean = true
scala> Map(1 -> "Olle") == Map(1 -> "Olle")
res3: Boolean = true
Run Code Online (Sandbox Code Playgroud)
但是当尝试对Array执行相同操作时,它的工作方式不同.为什么?
scala> Array('a','b') == Array('a','b')
res4: Boolean = false
Run Code Online (Sandbox Code Playgroud)
我使用过2.8.0.RC7和2.8.0.Beta1-prerelease.
我不确定是否有更好的方法:
trait Animal {
val name: String
val weight: Int
type SubAnimal <: Animal
def updateName(n: String) = returnMe(n, this.weight)
def updateWeight(w: Int) = returnMe(this.name, w)
// Abstract protected method
protected def returnMe(n: String, w: Int): SubAnimal
}
case class Dog(name: String, weight: Int) extends Animal {
type SubAnimal = Dog
override def returnMe(n: String, w: Int): Dog = Dog("Dog: " + name, w)
}
case class Cat(name: String, weight: Int) extends Animal {
type SubAnimal = Cat
override def …Run Code Online (Sandbox Code Playgroud) 我不知道在不可变对象上叫什么叫"setter"?
对于一个可变对象Person,setter的工作方式如下:
class Person(private var _name: String) {
def name = "Mr " + _name
def name_=(newName: String) {
_name = newName
}
}
val p = new Person("Olle")
println("Hi "+ p.name)
p.name = "Pelle"
println("Hi "+ p.name)
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但如果Person是不可变的呢?
class Person(private val _name: String) {
def name = "Mr " + _name
def whatHereName(newName: String): Person = new Person(newName)
}
val p = new Person("Olle")
println("Hi "+ p.name)
val p2 = p.whatHereName("Pelle")
println("Hi "+ p2.name)
Run Code Online (Sandbox Code Playgroud)
应该whatHereName叫什么?
编辑: 我需要把东西放在"setter"方法中,如下所示: …
我对这个ArithmeticException感到有点困惑.我在Scala 2.8.0.RC6和RC7上试过这个.
scala> 7.12 to(8, 0.2)
res0: scala.collection.immutable.NumericRange[Double] = NumericRange(7.12, 7.32, 7.52, 7.72, 7.92)
scala> 7.12 to(8, 0.5)
res2: scala.collection.immutable.NumericRange[Double] = NumericRange(7.12, 7.62)
scala> 7.12 to(8, 0.3)
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1525)
at java.math.BigDecimal.divide(BigDecimal.java:1558)
at scala.math.BigDecimal.$div(BigDecimal.scala:228)
at scala.math.Numeric$BigDecimalAsIfIntegral$class.quot(Numeric.scala:156)
at scala.math.Numeric$BigDecimalAsIfIntegral$.quot(Numeric.scala:163)
at scala.math.Numeric$BigDecimalAsIfIntegral$.quot(Numeric.scala:163)
at scala.math.Integral$IntegralOps.$div$percent(Integral.scala:23)
at scala.collection.immutable.NumericRange.genericLength(NumericRange.scala:104)
at scala.collection.immutable.NumericRange.<init>(NumericRange.scala:63)
at scala.collection.immutable.NumericRange$Inclusive.<init>(NumericRange.scala:209)
at ...
Run Code Online (Sandbox Code Playgroud)