作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始使用 scala,我发现一些语法令人困惑。例如来自 scalatest main page
class ExampleSpec extends FlatSpec with Matchers {
"A Stack" should "pop values in last-in-first-out order" in {...}
}
正如我所读,这意味着“应该”是字符串“A stack”的一种方法?如果那是对的,那是怎么发生的?它似乎在 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"
如果上面代码段中的“should”不是字符串“A Stack”的方法,那么我该如何正确阅读代码段?什么是“应该”,它与字符串有何关系?有什么线索吗?
最佳答案
这通常称为 Pimp My Library Enrich My Library 模式,在该模式中,我们可以通过隐式转换使用我们自己的方法扩展其他库(在本例中为 Scala 字符串)。
它的工作方式是 FlatSpec
混合了一个名为 ShouldVerb
的特征,它定义了以下隐式转换:
implicit def convertToStringShouldWrapper(o: String): StringShouldWrapperForVerb =
new StringShouldWrapperForVerb {
val leftSideString = o.trim
}
StringShouldWrapperForVerb
定义了 should
方法:
def should(right: String) ....
它在 REPL 中对你不起作用的原因是你没有 FlatSpec
并且通过它混入了 ShouldVerb
特性。
您可以在文档 under implicit classes 中阅读更多相关信息.
关于scalatest "A stack"应该是 "do something"——wtf?字符串的方法应该如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30757722/
我是一名优秀的程序员,十分优秀!