人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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)

●質問者: hebe
●カテゴリ:コンピュータ
✍キーワード:Class def nil require Ruby
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●0ポイント

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

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

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

logger.rbの中で

class $Logger

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

◎質問者からの返答

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

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


2 ● taka-hr
●50ポイント

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でやってみました。

◎質問者からの返答

ぉ、いけました。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ