我刚刚开始使用scala,我发现一些语法令人困惑.例如,从最新的主页面
class ExampleSpec extends FlatSpec with Matchers {
"A Stack" should "pop values in last-in-first-out order" in {...}
}
Run Code Online (Sandbox Code Playgroud)
当我读到它意味着"应该"是一个字符串"A堆栈"的方法?如果这是对的,那会怎么样?它似乎不适用于scala提示符
scala> class ExampleSpec {
| "A Stack" should "pop values"
| }
<console>:9: error: value should is not a member of String
"A Stack" should "pop values"
Run Code Online (Sandbox Code Playgroud)
如果"should"不是上述代码段中字符串"A Stack"的方法,那么我该如何正确阅读该代码段呢?什么是"应该"以及它与字符串有什么关系?有线索吗?
这通常被称为Pimp My Library Enrich My Library模式,我们可以使用隐式转换使用我们自己的方法扩展其他库(在本例中为Scala字符串).
它的工作方式是FlatSpec混合在一个特征中,该特征被ShouldVerb定义为以下隐式转换:
implicit def convertToStringShouldWrapper(o: String): StringShouldWrapperForVerb =
new StringShouldWrapperForVerb {
val leftSideString = o.trim
}
Run Code Online (Sandbox Code Playgroud)
并定义StringShouldWrapperForVerb了should方法:
def should(right: String) ....
Run Code Online (Sandbox Code Playgroud)
它在REPL中不起作用的原因是你没有FlatSpec和通过ShouldVerb混合的特性.
您可以在隐式类下的文档中阅读有关此内容的更多信息.
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |