scala - 关于 Scala View 的问题

标签 scala view implicit-conversion

我看到了例子,其中一个转换函数T => S作为隐式参数传递。斯卡拉 calls此功能view甚至提供了特殊的语法糖——view bound ——对于那种情况。

但是我们已经有了隐式转换!我可以更换这些views (即作为隐式参数传递的转换函数)具有隐式转换? ?我可以做什么 views我不能用隐式转换做什么?

最佳答案

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

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

def test[A <% Num](a: A): Int = a.i
test(33)

超过
def test2(a: Num): Int = a.i
test2(33)

是的? View 的含义正是这样:类型 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)

View 边界的另外两个用例:
  • 您可能只想在某些情况下从 T 转换为 S,例如懒洋洋
    (这在某种程度上与上述情况相同:您基本上想与 T 一起工作)
  • 您可能想要链接隐式转换。看到这个帖子:How can I chain implicits in Scala?
  • 关于scala - 关于 Scala View 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5526048/

    相关文章:

    c++ - const限定转换

    c++ - 如果使用 g++,为什么 std::cout 可以转换为 void*?

    scala - 如何在相对包导入中引用父包?

    xml - java.nio.charset.UnmappableCharacterException : Input length = 1

    t-sql - SQL Server, View 使用计数

    c++ - 为什么隐式转换对于非原始类型不模棱两可?

    scala - 如何确定类型参数是否是 trait 的子类型?

    scala - 在 Scala 中强制使用别名类型

    java - 无法编辑项目中的特定 webdynpro java View

    mysql - 如何使用 View 执行复杂的 sql 查询,而不是依赖中间(具体)表