こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Ruby インスタンス変数@fooを持つClass Fooの中ので関数fooを呼ぶ

#!/usr/bin/ruby

def foo(arg)
arg.upcase
end

def bar(arg)
arg.upcase
end

class Foo
attr_reader :foo
def initialize(arg)
@foo = foo(arg) #@foo = bar(arg)とすれば期待した結果が得られる
end
end

f=Foo.new("hoge")
puts f.foo

上記実行するとエラーになります。

Class Fooの中のでfooといえば、インスタンス変数@fooであって、関数のfooではないって事なのでしょうか。
インスタンス変数@fooを持つClass Fooの中ので関数fooを呼ぶことはできないのでしょうか?

投稿日時 - 2008-07-28 11:10:16

QNo.4209588

暇なときに回答ください

質問者が選んだベストアンサー

クラス Foo の中で attr_reader :foo した際にメソッド foo() が定義されます。
その後 Foo の中で foo と言えば Foo.foo() です。

最初に定義した、大文字にするバージョンの foo は Kernel.foo() として明示的に呼び出すしかないでしょう。

投稿日時 - 2008-07-28 12:44:23

お礼

ご回答ありがとうございます。
>クラス Foo の中で attr_reader :foo した際にメソッド foo() が定義されます。
ローカル変数の@fooだけでなくメソッドfooも定義だということを失念してました。

おかげさまでスッキリしました。

投稿日時 - 2008-07-28 14:24:09

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)