对于Scala中的隐式转换,我可以使用隐式转换函数
implicit def intToX(i:Int):X = new X(i)
1.myMethod // -1
Run Code Online (Sandbox Code Playgroud)
或隐含的类
implicit class X(i: Int) {
def myMethod = - i
}
1.myMethod // -1
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别吗?我什么时候应该更喜欢一个?
关于隐式转换与类型类有一个相关的问题,但它只比较隐式函数和类型类.我感兴趣的是与隐式类的区别.
我一直在为这个问题绊绊(例如在这个问题中)。以原始整数类型数组(例如的数组)的形式给定2D位矩阵/板/数组long。为简单起见,我们可以假设一个方阵,例如,long在具有64位的平台上,由64个值组成的数组long。
让我们x[i]为0 <= i < 64是输入数组。计算数组y[i]以0 <= i <= 64使:
(x[i] >> j) & 1 == (y[j] >> i) & 1
Run Code Online (Sandbox Code Playgroud)
这x >> i是xby i位的按位右移,&是和,x[i]是iarray 中第th个位置的值x。
如何实现最有效地将数组映射x到数组的功能y?
我主要是在寻找非破坏性的方法,这些方法会使输入数组x保持完整。
使用的编程语言应具有整数类型的数组和按位运算。许多语言都满足这些要求。C / C ++和Java解决方案看起来非常相似,所以让我们选择这些语言。
我正在阅读一些较旧的Scala帖子以更好地理解类型类,我遇到了一个似乎非常有用的,但这个例子似乎已经过时了.
有人可以帮我找出正确的方法来做Phillipe的意图吗?这是代码
trait Default[T] { def value : T }
implicit object DefaultInt extends Default[Int] {
def value = 42
}
implicit def listsHaveDefault[T : Default] = new Default[List[T]] {
def value = implicitly[Default[T]].value :: Nil
}
default[List[List[Int]]]
Run Code Online (Sandbox Code Playgroud)
复制/粘贴并在REPL中运行时,我得到这个>
scala> default[List[List[Int]]]
<console>:18: error: not found: value default
default[List[List[Int]]]
^
Run Code Online (Sandbox Code Playgroud)