2012-02-16 16 views
0

で渡された関数を使用します。私は、方法本体の中でfをどう使うことができますか、より正確には、またはf()またはf(_)が動作しないので、どのように参照すればよいでしょうか。Scalaは、私は次のコードをお持ちの場合は_パラメータ

UPDATE:

object Wonderful { val wows = Buffer[Wow]() def yo(f: _ => Wow) { wows += f } } class Joy[+R](fs: Buffer[_ => R]) { def exalt() { fs.map(Wonderful.yo(_)) } } 

そのバッファはパラメータ化できませんタイプ_ => Wowの機能は、そのようなクラスから来て、このメソッドに渡されるので

fの種類がf: => Wowに変更することができません=> Rでは、エラーが表示されます。

更新2:私は第2部の説明を終える前に両方ともあなたが二番目に答えました!ありがとう!それはスピードです!

UPDATE 3:基本的に、私はScalaを学んでいます。私は考えることができるすべてを試してみようとしています。この特別なコードでは、次のようなことが起こります:私は3つの基本クラスを持っています:

  • WorldObject - すべてのゲームオブジェクト(x、yなどあります)を表します。
  • エミッター - 時間の経過とともにオブジェクトを放出するものを表します(WorldObjectを拡張します)。
  • Funset - 呼び出されるとWorldObjectsを生成する関数のセット。将来、私はそれらに部分的に準備された引数を持つ関数を部分的に適用し、対応するファクトリメソッドに直接渡したいと思っていました。
  • ワールド - すべてが行われます。

主な点は、Funsetの「生成」関数のコレクションを実行時に編集できるということです。その理由は、それがバッファーとして表されているからです。更新サイクルごとに、エミッタはFunsets関数のそれぞれを、世界で生成されたオブジェクトを明示する世界のクリエータ関数に渡します。

私はそれが理解できるように、私が説明したことを願っています...おそらく少しのビザールや間違ったアーキテクチャですが、とにかく、私はスカラについて今何かを学んだことがあります!

+1

あなたはここで何をしようとしているのかについての詳細を追加できますか?私はまだ理解できません。 – missingfaktor

+0

3回目の更新を参照%) – noncom

答えて

2

_ => Wowは、あなたが知らないタイプの単一の引数を取り、うわー返すメソッドです。それを呼び出す引数の種類がわからないので、呼び出すことはできません!

私はあなたが以下のように行うことができ、引数なし、との方法をしたい疑う:

def yo(f:() => Wow) { wows += f() } 

また、あなたはもう少し暗黙的であるby-name parameterを行うことができます。

def you(f: => Wow) { wows += f } 

編集:違いはあなたがそれをどのように呼び出すかです。 by-nameパラメータは、式を使用するときに式を評価するだけです。関数を渡すことは、実際に呼び出すことのできる関数を渡すことです。

+0

もう一つのmissingfaktorのコメントを見てください。さらに、バッファを 'Buffer [_ => R]'でパラメタリゼーションできますが、 'Buffer [=> R]'ではできません... – noncom

+1

Iおそらく 'Buffer(()=> R)'が必要だと思います。 – Calum

4

あなたは後に続く名前のパラメータですか?そうであれば、あなたの構文は少しばかりです。ここでは正しい方法は次のとおりです。

scala> class Wow 
defined class Wow 

scala> val wows = collection.mutable.Buffer.empty[Wow] 
wows: scala.collection.mutable.Buffer[Wow] = ArrayBuffer() 

scala> def yo(f: => Wow) { wows += f } 
yo: (f: => Wow)Unit 
+0

まさに!ここでは、パラメータを表す '_ '記号を外しました。私のコードはそれを持っています。そして外側から、渡されたfsはクラス 'クラスのバディ[+ R](バッファー[_ => R]){...}'から取り除かれ、ここで '_'を離れるとそれは、再び、不平を言うつもりです。 – noncom

+1

@noncom、あなたは '()=> R'を望むと思う。 – missingfaktor

関連する問題