2011-02-23 10 views
3

だが、私はこれらのクラスを持っているとしましょうb暗黙的な値ですか?私。私は期待してメソッドを持っている場合C暗黙、PIMPLパターンなど

def foo(c: C) 
+2

「Pimpl」はC++のアイデアです。「実装へのポインタ」を意味し、主にコンパイル速度を向上させるために、クラス実装の詳細をヘッダーに表示しないようにする方法です。あなたはScalaismである "pimp my library"を意味していて、 "ソースを変更できないときにライブラリーに物を追加することを意味します"という意味です。 –

答えて

6

case class A表記は廃止されました。 case class A()を使用する必要があります。そうでない場合はをval aに割り当て、aはシーンの背後に生成されるケースクラスAの付随オブジェクトを参照します。

aは、コンパニオンオブジェクトではなくケースクラスのインスタンスを参照したいと考えています。

もしそうなら、何を求めていることは可能である - abは暗黙的である必要はありませんが、スコープに新しい暗黙のメソッドを追加する必要があります:

implicit def obtainC = new C(a, b) 

その後、あなたは

def foo(implicit c: C) 

コンプリートセッション:

方法 foocimplicit修飾子を配置する必要があります
+0

ありがとう!私は、ケースクラスの構文に関する問題について知っています。私はちょうどそれらを正しく印刷することを怠惰にしていました。私の悪い;) – chrsan

+0

問題はありません。私はちょうど 'a'と' b'が本当にコンパニオンオブジェクトを指し示してほしいかどうか分からなかったので、私はそれを指摘しました。 :) – axel22

+2

ケースクラスA()ポイントでは、オブジェクトにデータがない場合、実際にはケースオブジェクトA(空リストの場合はNilに似ています)とするのが良い候補です。それをケースオブジェクトにすることは、equals、hashCode、およびtoStringを提供し、それが他のケースクラスの一部である場合、Aを「均一」に保ちます。 –

関連する問題