2012-05-06 11 views
9

Cay S. Horstmannの「辛抱強い人のためのScala」を通して、私は第1章の最初の練習で明らかになったことに気付きました。Scala REPLのタブ補完とは何ですか?

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

、私は次の

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

を取得しかし、私はタブをもう一度ヒットした場合、私は少し別のリストを取得することに気づきました。

 
scala> 3. 
!=    ##    %    &    *    +    
-   /       >=    >>    >>>   ^   asInstanceOf 
equals   getClass  hashCode  isInstanceOf toByte   toChar   
toDouble  toFloat  toInt   toLong   toShort  toString  
unary_+  unary_-  unary_~  |  

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

答えて

11

REPL raises the verbosity of the completionで二回タブを押す:「methodNameに」zの補完の間である場合

、およびverbosity > 0 タブは、その後、我々はalternativesFor を呼び出して、連続して2回押すと一覧が表示されたことを示しますオーバーロードされたメソッドシグネチャ。 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 _)) 
) 

を1つのタブは、通訳者の開発者が決定したいくつかのルールによってフィルタリングされたメソッドを取得しています。 2つのタブでフィルタリングされていないバージョンが表示されます。

関連する問題