字符串被视为序列

时间:2017-01-10 13:49:48

标签: scala

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

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

  

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

     

def f [CC<%Traversable [_]](a:CC,b:CC):CC = if(a.size< b.size)a else b

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

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

我一直看到使用的简写“ev”,特别是在与上下文边界或视图边界示例相关时:

  

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

它代表什么?

提前谢谢你。 干杯

1 个答案:

答案 0 :(得分:4)

  

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

Scala提供了一个名为java.lang.String的{​​{1}}包装器:

WrappedString

当你跑步时:

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

编译器通过f("he", "hello") 隐式将字符串文字转换为WrappedString的实例:

Predef.wrapString

反过来,f[String]("he", "hello")({ ((s: String) => scala.this.Predef.wrapString(s)) }); 扩展WrappedString,这就是它遵守视图边界请求可转换为可遍历的原因。

  

我一直看到使用的简写“ev”,特别是在与之相关时   上下文边界或视图边界,它代表什么?

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