在Scala中'foo意味着什么?

时间:2014-03-27 19:23:55

标签: scala syntax scalatest

例如,scalatest说要检查是否定义Option,我应该使用像

这样的表达式
val opt: Option[String] = ...
opt should be ('defined)

由于OptionisDefined,这个API设计或实际上是对所述功能的异乎寻常的引用......但我想知道它是如何工作的。

1 个答案:

答案 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)