2016-10-04 2 views
1

指定されたクラスを返す:Scalaのオブジェクトは:に渡したり、関数から

def f(x: Obj): Boolean 
def g(x: Boolean): Obj 

どちらの二つの例の原因:

object Obj {...} 

が機能またはこのような関数からオブジェクトを返すためにオブジェクトを渡す方法がありますCE(コンパイルエラー)。

私はそれが実用よりも、主に理論的なので、最初の例で関数fの本体で名前Objによって直接可能使用目的だということを知っています。しかし、2番目の例では、私は別の方法を見ることができません。

どうやら両方の例は、「アンチパターン」であり、Scalaのオブジェクトは、このような方法を適用すべきではありません。

+0

はこれについて考えてみて、 'Obj'タイプがありますか? – thefourtheye

+0

'object'はクラスではなく、あなたの場合' Object'(または 'AnyRef')にあるクラスのインスタンスです。 –

+0

ありがとう!もちろん、シングルトンオブジェクトです。しかし、以下の答えで分かるように、このオブジェクトのタイプは 'Obj.type'です。この構文を使用すると、それをパラメータとして渡してfucntionから返すことができます。 –

答えて

3

使用Obj.type

scala> object O 
defined object O 

scala> def f(o: O.type) = 42 
f: (o: O.type)Int 

scala> f(1) 
<console>:14: error: type mismatch; 
found : Int(1) 
required: O.type 
     f(1) 
     ^

scala> f(O) 
res1: Int = 42 
関連する問題