相关疑难解决方法(0)

Scala在哪里寻找暗示?

对Scala新手的一个隐含问题似乎是:编译器在哪里寻找隐含?我的意思是隐含的,因为这个问题似乎永远不会完全形成,好像没有它的话.:-)例如,integral下面的值来自哪里?

scala> import scala.math._
import scala.math._

scala> def foo[T](t: T)(implicit integral: Integral[T]) {println(integral)}
foo: [T](t: T)(implicit integral: scala.math.Integral[T])Unit

scala> foo(0)
scala.math.Numeric$IntIsIntegral$@3dbea611

scala> foo(0L)
scala.math.Numeric$LongIsIntegral$@48c610af
Run Code Online (Sandbox Code Playgroud)

对于那些决定学习第一个问题的答案的人来说,另一个问题是,在某些明显模糊的情况下(但无论如何编译),编译器如何选择使用哪个隐式?

例如,scala.Predef定义两个转换String:一个转换为WrappedString另一个转换为StringOps.然而,这两个类都有很多方法,所以为什么Scala不会在调用时抱怨歧义map

注意:这个问题的灵感来自另一个问题,希望以更一般的方式陈述问题.该示例是从那里复制的,因为它在答案中被引用.

scala implicit-conversion implicits

389
推荐指数
2
解决办法
4万
查看次数

如何在Scala中取消导出字符串"+"运算符?

我正在写一个DSL,其中"+"运算符是严格数字的,就像其他一些流行语言一样.它很接近,但String"+"运算符搞乱了我的隐式转换.unmporting String类的运算符的语法是什么?

为了更清楚,而不是这个:

scala> var x = "2" + 3;
x: java.lang.String = 23

我想得到x:Int = 5

我想我只需要做两件事就可以了:

  • 从Strings中删除(在我的范围内不引入)"+"的定义
  • 定义String到Int的隐式转换

我坚持第一步.

谢谢

scala scala-2.8

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

标签 统计

scala ×2

implicit-conversion ×1

implicits ×1

scala-2.8 ×1