小编oll*_*erg的帖子

使用`==`运算符的Array类型的奇怪行为

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.

arrays scala equality equals

10
推荐指数
1
解决办法
1319
查看次数

"MyType"问题:我是否必须在Scala中使用抽象类型(或泛型)来返回实际的类?

我不确定是否有更好的方法:

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)

generics scala

9
推荐指数
3
解决办法
838
查看次数

Scala在不可变对象上为"setter"命名约定

我不知道在不可变对象上叫什么叫"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"方法中,如下所示: …

scala conventions

8
推荐指数
2
解决办法
1279
查看次数

使用RichDouble.to操作获取NumericRange

我对这个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)

scala

6
推荐指数
2
解决办法
1707
查看次数

标签 统计

scala ×4

arrays ×1

conventions ×1

equality ×1

equals ×1

generics ×1