1

私は、サンプルコードを持っている:SPARK REPL(Aへの参照が曖昧です)にエラーが発生し、IntellijとScala REPLで正常に動作しますか?

class A(str: String) { 
    println(s"InsideCase:::$str") 
} 

object A { 
    def apply(str: String) = { 
    println("foobar::") 
    new A(str) 
    } 
} 

object b extends App { 
    A("kool") 
} 

このコードはのIntelliJで正常に動作します。そして、私に出力できます:

foobar:: 
InsideCAse:::kool 

をしかし、REPLでこれをしようとすると:

scala> :paste 
// Entering paste mode (ctrl-D to finish) 

class A(str: String) { 
    println(s"InsideCAse:::$str") 
} 

object A { 
    def apply(str: String) = { 
    println("foobar::") 
    new A(str) 
    } 
} 


// Exiting paste mode, now interpreting. 

defined class A 
defined object A 

scala> A("kool") 

それは私に次のエラー与える:

<console>:27: error: reference to A is ambiguous; 
it is imported twice in the same scope by 
import $line31$read.A 
and import INSTANCE.A 
     A("kool") 

を私はここで何をしないのですか?もしあなたが助けてくれるなら、それを詳しく説明してください。

+0

それは私のために正常に動作しています。 –

+0

これはScala REPLで動作しますが、なぜSPARK REPLでは動作しませんか? –

答えて

2

これはSpark REPLの制限です。あなたはそれをオブジェクトラッパーを持つ古い学校の方法を行うことができ、次のいずれか

object awrapper { 

    class A(str: String) { 
    println(s"InsideCAse:::$str") 
    } 

    object A { 
    def apply(str: String) = { 
     println("foobar::") 
     new A(str) 
    } 
    } 
} 

import awrapper._ 

またはpaste -raw(スカラ2.11+)とパッケージを定義します。

scala> :paste -raw 
// Entering paste mode (ctrl-D to finish) 

package apacakage 

class A(str: String) { 
    println(s"InsideCAse:::$str") 
} 

object A { 
    def apply(str: String) = { 
    println("foobar::") 
    new A(str) 
    } 
} 


// Exiting paste mode, now interpreting. 


scala> import apacakage._ 
import apacakage._ 

scala> A("kool") 
foobar:: 
InsideCAse:::kool 
res1: apacakage.A = [email protected] 
関連する問題