10

CayS.Horstmannの「ScalafortheImpatient」を進めていると、最初の章の最初の演習で明らかになった興味深いことに気づきました。

  1. Scala REPLで、3と入力してからTabキーを押します。どのような方法を適用できますか?

これを行うと、次のようになります

scala>3。
%&* +-/              
>> = >> >>> ^ asInstanceOf   
isInstanceOf toByte toChar toDouble toFloat toInt          
toLong toShort toString unary_ + unary_- unary_〜        
|       

しかし、もう一度Tabキーを押すと、わずかに異なるリストが表示されることに気付きました。

scala>3。
!= ##%&* +              
-/> = >> >>> ^ asInstanceOf   
getClass hashCode isInstanceOftoBytetoCharに等しい         
toDouble toFloat toInt toLong toShort toString       
unary_ + unary_- unary_〜|    

REPLはここで私に何を伝えようとしていますか?2回目に表示されるさまざまな方法について何か特別なことはありますか?

4

1 に答える 1

12

REPLでタブを2回押すと、完了の冗長性が高まります。

「methodName」がzの補完の中にあり、タブが2回連続して押されたことを示す場合 、オーバーロードされたメソッドシグネチャのリストverbosity > 0を呼び出して表示します。alternativesFor

インタプリタソースからの次のメソッドは、メソッドの完了のためにフィルタリングされるものを示していverbosity == 0ます(つまり、タブを1回だけ押して、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 _))
)

したがって、1つのタブを使用すると、インタプリタ開発者が合理的で有用であると判断したいくつかのルールによってメソッドがフィルタリングされます。2つのタブで、フィルタリングされていないバージョンが表示されます。

于 2012-05-06T18:14:42.363 に答える