在探索Cay S. Horstmann的“不耐烦的斯卡拉”时,我注意到第一章第一次练习所揭示的一些有趣的东西。
当我这样做时,我得到以下
scala> 3. % & * + - / > >= >> >>> ^ asInstanceOf isInstanceOf toByte toChar toDouble toFloat toInt toLong toShort toString unary_+ unary_- unary_~ |
但我注意到,如果我第二次点击Tab,我会得到一个略有不同的列表。
scala> 3. != ## % & * + - / >= >> >>> ^ asInstanceOf equals getClass hashCode isInstanceOf toByte toChar toDouble toFloat toInt toLong toShort toString unary_+ unary_- unary_~ |
REPL试图在这里告诉我什么?第二次出现的不同方法有什么特别之处吗?
答案 0 :(得分:11)
在REPL raises the verbosity of the completion中点击标签两次:
如果“methodName”在
z
的完成中,并且verbosity > 0
表示 选项卡已连续按两次,然后我们拨打alternativesFor
并显示重载方法签名列表。
interpreter source中的以下方法表示在verbosity == 0
时(例如,当您只点击一次标签而未获得alternativesFor
版本时)为方法完成过滤的内容:
def anyRefMethodsToShow = Set("isInstanceOf", "asInstanceOf", "toString")
def excludeEndsWith: List[String] = Nil
def excludeStartsWith: List[String] = List("<") // <byname>, <repeated>, etc.
def excludeNames: List[String] =
(anyref.methodNames filterNot anyRefMethodsToShow) :+ "_root_"
def exclude(name: String): Boolean = (
(name contains "$") ||
(excludeNames contains name) ||
(excludeEndsWith exists (name endsWith _)) ||
(excludeStartsWith exists (name startsWith _))
)
因此,使用一个选项卡,您可以通过某些规则筛选方法,而解释程序开发人员已经确定这些规则是合理且有用的。两个选项卡为您提供未经过滤的版本。