Ruby 学習中です。疑問に行き当たったので説明をお願いします。

下記コードで ruby logger.rb とすると期待した結果が得れるのですが、下 2 行の実行コードを別ファイル (test.rb) に移して logger.rb を require し ruby test.rb とするとエラーが返ります。原因をさくっと説明願えますでしょうか。
有効な解答をお寄せいただいた方にポイントを集中して割り振り、満足の行く解答を得た時点で残りの投稿がある場合も質問を閉めたいと思います。よろしくお願いします。

# logger.rb
class Logger
private_class_method :new
@@logger = nil
def Logger.create
@@logger = new unless @@logger
@@logger
end
end
# 実行コード
logger = Logger.create
puts logger.inspect

# test.rb
require ”logger.rb”
logger = Logger.create
puts logger.inspect

# エラー
test.rb:2: undefined method `create’ for Logger:Class (NoMethodError)

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

http://www.ruby-lang.org/ja/man/index.cgi?cmd=src;name=%CA%D1%BF...

変数と定数 - Rubyリファレンスマニュアル

test.rb に class Logger がないというエラーですね。

logger.rbの中で

class $Logger

と$を変数名につけてみたらいかがでしょうか?

id:hebe

試してみましたが、結果は変わりませんでした。

# バージョンの明記を忘れていましたが ruby1.8 になります

2005/01/27 13:26:00
id:taka-hr No.2

回答回数57ベストアンサー獲得回数4

ポイント50pt

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C5%BA%C...

添付ライブラリ - Rubyリファレンスマニュアル

添付ライブラリに logger.rb があるからです。

require ”./logger.rb” にするとか、

別のファイル名にするとかすれば解決するんじゃないかと思います。

確認はCygwin版Ruby-1.8.1でやってみました。

id:hebe

ぉ、いけました。

納得です。ありがとうございます。

2005/01/27 13:28:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません