【问题标题】:String viewed as a Sequence将字符串视为序列
【发布时间】:2017-01-10 13:49:48
【问题描述】:

丹尼尔在这篇文章中的回答是: What are Scala context and view bounds?

提供了一种将字符串作为 Scala 集合处理的方法。

处理 String 和 Array,它们是 Java 类,就像 Scala >集合一样。例如:

def f[CC

我想知道在 Scala 标准库中哪里可以找到这个功能。

与上述帖子相关的另一个简单问题:

我经常看到使用的简写“ev”,尤其是与上下文边界或视图边界示例相关时:

def g[A](a: A)(隐式 ev: B[A]) = h(a)

它代表什么?

提前谢谢你。 干杯

【问题讨论】:

  • 我想知道我是否可以在 Scala 标准库中找到此功能。您是在谈论 String 被视为 Scala 集合的位置吗?
  • 是的,反正我看到你已经回答了,非常感谢你的详细解释和及时!

标签: scala


【解决方案1】:

我想知道我是否可以在 Scala 中找到此功能 标准库。

Scala 为 java.lang.String 提供了一个包装器,称为 WrappedString

final class WrappedString(val self: String) extends AbstractSeq[Char]
                                            with IndexedSeq[Char] 
                                            with StringLike[WrappedString]

当你运行时:

f("he", "hello")

编译器通过Predef.wrapString 将字符串文字隐式转换为WrappedString 的实例:

f[String]("he", "hello")({
  ((s: String) => scala.this.Predef.wrapString(s))
});

反过来,WrappedString 扩展了 IndexedSeq[Char],这就是为什么它遵守视图边界请求以转换为可遍历对象。

我经常看到使用的速记“ev”,尤其是与 上下文边界或视图边界,它代表什么?

它是“证据”的缩写。如果您考虑一下,当您请求某种隐式参数在范围内时,编译器会要求您提供该操作可能发生的证据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 2012-12-23
    • 2020-05-20
    • 1970-01-01
    • 2021-11-14
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多