2017-07-06 5 views
1

なぜスカラREPLでは、同じ名前の複数の関数を別の関数内に持つことができませんか?メソッドが2回定義されています

def wrapper(): Unit = { 
    def a: Unit = ??? 
    def a(i: Int): Unit = ??? 
    } 

error: method a is defined twice

conflicting symbols both originated in file '< console>'

+0

これはやや恣意的ですが、一般的な判断です。あなたがこれを行うと、デバッグが難しくなることが分かります(それがなぜ必要なのか想像するのは難しいです)。 – Alec

+0

私の関数は次のようなものです。getBirthDates(userData:UserData){ isValid(month:String)= month.matches(regexp)&& isValid(month.toInt) isValid(month:Int)= month> 0 && month <= 12 ... }そして、私はそれらをオブジェクトのプライベートメソッドとして移動しました。 しかし、実際に私は2年間スカラでコーディングしていましたが、これまでにこの問題を発見したことはなかったので、まれな状況です。 – Ivan

+0

これはREPLでのみ、またはいつものようにソースコードをコンパイルするときにも起こりますか? – stefanobaghino

答えて

2

あなたはそのためのプリミティブの適切なOOPではありません、それはビューのOOPポイントからresonableに見えるされていない(と私は、コンパイラに同意する)どのようなメソッド内(OOP機能を)オーバーロードを使用したいように見えます。これをOOP機能に合わせるには、オブジェクトにラップしてください:

def wrapper(): Unit = { 
    object wr { 
    def a: Unit = ??? 
    def a(i: Int): Unit = ??? 
    } 

    wr.a(10) 
    wr.a 
} 
+1

良いアイデア、また私はインポートwr._を追加し、ちょうど(10) – Ivan

関連する問題