質問

私の代わりにトップレベルのコンパイルされたコードを使用してのOCamlを学ぶしようとしています。ただし、サンプルコードの多くは、オンライン後者にアピールするようです。

私は以下のあたりのオブジェクトのメソッド内で新しいはFooを作成したいと思います。このコードは、doFooProc定義と構文エラーを引用し、コンパイルされません。

class bar =
object (self)
 method doFooProc = (new Foo "test")#process
end;;

class foo (param1:string)=
object (self)
 method process = Printf.printf "%s\n" "Processing!"
 initializer Printf.printf "Initializing with param = %s\n" param1
end;;

また、「せ」の構文は、クラス定義内で友好的であるように思えません。それはなぜですか?

class bar =
object (self)
 method doFooProc = 
  let xxx = (new Foo "test");
  xxx#process
end;;

class foo (param1:string)=
object (self)
 method process = Printf.printf "%s\n" "Processing!"
 initializer Printf.printf "Initializing with param = %s\n" param1
end;;

私は、インスタンス化、fooのプロセスのコマンドをdoFooProc方法でクラスfooの新しいオブジェクトを作成し、呼び出して行く方法を教えてください。

役に立ちましたか?

解決

あなたはほとんどが正しいだが、混乱モジュールシステムとの構文、または他の言語の思考のどちらかです。私の考慮事項を取り、あなたは良いはずです!

  

私は新しいはFooを作成したいです   オブジェクトごとのメソッド内   未満。このコードは、コンパイルされません。   と構文エラーを引用   doFooProc定義ます。

オブジェクトのための

小文字の「foo」という、モジュールが大文字です。また、あなたはそれを呼び出すオブジェクトの上のfooの定義を置く必要があります。この問題が発生した場合は、Unbound class fooを取得する必要があります。

class bar =
object (self)
 method doFooProc = (new foo "test")#process
end;;
  

また、「せ」の構文は、クラス定義内で友好的であるように思えません。それはなぜですか?

あなたはセミコロンを持っている代わりに、一致inを持っていないので。そして、それが動作します。また、あなたはそれらの余分括弧を削除することができますが、それは問題ではありません。

class bar =
object (self)
 method doFooProc = 
  let xxx = (new Foo "test") in
  xxx#process
end;;
  

たとえば、FOOのメソッドは、インスタンス化、場合   バーは、同様に、方法はあります   で生じる問題を逃れます   内のクラス定義を発注   ソースファイル?

はい。それはあなたがandキーワードとそれらを接続するだけ相互再帰関数やモジュールを書くようなものだ。

class bar =
  object (self)
    method doFooProc = (new foo "test")#process
  end

and foo (param1:string) = 
  object (self)
    method process = Printf.printf "%s\n" "Processing!"
    initializer Printf.printf "Initializing with param = %s\n" param1
  end

他のヒント

二つの相互に再帰的なクラスについては、使用してキーワード

class bar =
  object (self)
    method doFooProc = 
      let xxx = (new foo "test") in
      xxx#process
  end
and foo (param1:string)=
  object (self)
    method process = Printf.printf "%s\n" "Processing!"
    initializer Printf.printf "Initializing with param = %s\n" param1
    method bar = new bar
  end;;`
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top