相关疑难解决方法(0)

如何设置隐式转换以允许数字类型之间的算术运算?

我想实现一个类C来存储各种数值类型的值,以及布尔值.此外,我想能够在这个类的实例操作,类型之间,转换在必要Int --> DoubleBoolean -> Int,即,能够添加Boolean + Boolean,Int + Boolean,Boolean + Int,Int + Double,Double + Double等等,返回最小的可能类型(IntDouble可能的),只要.

到目前为止,我想出了这个:

abstract class SemiGroup[A] { def add(x:A, y:A):A }

class C[A] (val n:A) (implicit val s:SemiGroup[A]) {
  def +[T <% A](that:C[T]) = s.add(this.n, that.n)
}

object Test extends Application {
  implicit object IntSemiGroup extends SemiGroup[Int] { 
    def add(x: Int, y: Int):Int = x + y …
Run Code Online (Sandbox Code Playgroud)

types scala numeric

9
推荐指数
1
解决办法
1192
查看次数

隐式转换多个级别,为什么int要自动工作?

我一直认为在scala中不可能进行多级隐式转换(除非你定义视图边界:http://docs.scala-lang.org/tutorials/FAQ/context-and-view-bounds.html)

但似乎类型系统存在缺陷或不一致.以下示例(改编自如何在Scala中链接implicits?)

class A(val n: Double){
  def total = n + 10
}

object T1{
  implicit def toA(n: Double): A = new A(n)
  val i : Int = 5
  println(i.total) //Why does this work?
  println(5.2.total)
}
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么Int - > Double - > A的隐式转换有效.有人可以解释原因吗?谢谢

scala

9
推荐指数
1
解决办法
4693
查看次数

误导编译时错误

为什么以下编译?

scala> val ch1 = 'a' + 'b'
ch1: Int = 195
Run Code Online (Sandbox Code Playgroud)

但以下不是?

scala> var ch1 = 'a'
ch1: Char = a

scala> ch1 += 'b'
<console>:9: error: type mismatch;
 found   : Int
 required: Char
       ch1 += 'b'
           ^

scala> ch1 = ch1 + 'b'
<console>:8: error: type mismatch;
 found   : Int
 required: Char
       ch1 = ch1 + 'b'
                 ^
Run Code Online (Sandbox Code Playgroud)

为什么错误信息如此误导?为什么它说required: Char我什么时候通过显然是一个Char

scala compiler-errors

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

标签 统计

scala ×3

compiler-errors ×1

numeric ×1

types ×1