アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、javaからrubyに移行するために勉強しているのですが、別のファイルに定義したクラスのインスタンスが作成できなくて、困っています。
具体例をあげると
require './B'
class A end
def initialize
b = new B
end
end

--別のファイル
class B
def initialize
p 'hello'
end
 public : initalize
end

こんな2つのファイルがあったとして、Aのインスタンスを作成すると、
undefined method `B’ というエラーがでます。
私としてはこのエラーの原因がinitializeがデフォルトでprivate宣言なのが原因だと考えているのですが、publicと指定してもエラーとなることから、いくつか疑問が湧いたので質問させていただきます。

1、そもそもBクラスのインスタンスが作成できないのはinitializeがデフォルトでprivate宣言なのが原因なのか?
2、1があっていたと仮定するとBクラスのinitializeをpublic指定しているのになぜ呼び出せないのか?
3、rubyはなぜデフォルトでinitializeがprivateなのか?(javaではコンストラクタをprivateにするということは普通はしない。使うときはシングルトンやUtilのようなクラスを作るときに限る)

以上です。よろしくお願いします。

A 回答 (1件)

そもそもインスタンス生成の構文が違います。

Rubyでは
b = B.new
と書きます。
    • good
    • 0
この回答へのお礼

お恥ずかしい限りです。知識としてはnewの書き方はあったんですが、習慣で書いていました。おかげさまで解決できました。ありがとうございます。

お礼日時:2012/04/07 23:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!