关于Scala中的观点的问题

Mic*_*ael 3 scala view implicit-conversion

我看到了一些示例,其中转换函数T => S作为隐式参数传递.Scala 调用此函数view甚至提供特殊的语法糖view bound- 对于这种情况.

但是我们已经进行了隐式转换!我可以views用隐式转换替换这些(即作为隐式参数传递的转换函数)吗??我可以views用隐含的转换来做什么?

0__*_*0__ 9

我对你的问题的理解是,有什么好处

case class Num(i: Int)
implicit def intToNum(i: Int) = Num(i)

def test[A <% Num](a: A): Int = a.i
test(33)
Run Code Online (Sandbox Code Playgroud)

过度

def test2(a: Num): Int = a.i
test2(33)
Run Code Online (Sandbox Code Playgroud)

是?那么视图的含义正是如此:类型T可以被视为另一种类型S.您的方法或函数可能首先想要处理T. 一个例子是Ordered:

def sort[A <% Ordered[A]](x: A, y: A): (A, A) = if (x < y) (x, y) else (y, x)

sort(1, 2)     // --> (1,2)
sort("B", "A") // --> (A,B)
Run Code Online (Sandbox Code Playgroud)

视图边界的另外两个用例:

  • 您可能只想在某些情况下从T转换为S,例如懒惰(这与上述情况相同:您基本上想要使用T)
  • 您可能希望链接隐式转换.看到这篇文章:如何在Scala中链接implicits?