gpt4 book ai didi

scalatest "A stack"应该是 "do something"——wtf?字符串的方法应该如何?

转载 作者:行者123 更新时间:2023-12-02 15:25:12 25 4
gpt4 key购买 nike

我刚刚开始使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com