下記コードで 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)
http://www.ruby-lang.org/ja/man/index.cgi?cmd=src;name=%CA%D1%BF...
変数と定数 - Rubyリファレンスマニュアル
test.rb に class Logger がないというエラーですね。
logger.rbの中で
class $Logger
と$を変数名につけてみたらいかがでしょうか?
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でやってみました。
ぉ、いけました。
納得です。ありがとうございます。
試してみましたが、結果は変わりませんでした。
# バージョンの明記を忘れていましたが ruby1.8 になります