例如,scalatest说要检查是否定义Option
,我应该使用像
val opt: Option[String] = ...
opt should be ('defined)
由于Option
有isDefined
,这个API设计或实际上是对所述功能的异乎寻常的引用......但我想知道它是如何工作的。
答案 0 :(得分:1)
将评论与问题和一些快速实验结合起来,这就是我所学到的:
语法'foo
只是调用返回Symbol
个实例的查找或创建工厂方法的快捷方式。
符号不是字符串的美化别名;一个人不能简单地将Symbol实例用作String。
并非所有字符串都可以是符号。空格,转义等不是符号中的有效字符。
API设计人员可以使用这些特性。在OP中,scalatest的匹配器要求函数名称不是字符串,而是符号。它们实质上是在重载be
函数 -
// String; actually AnyRef -- treat as a value comparison
string1 should be ("defined")
// calls the method on option1 and checks whether output == true
option1 should be ('defined)