「一気に最後まで読んだ」本、教えて下さい!

#!/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を呼ぶことはできないのでしょうか?

A 回答 (1件)

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


その後 Foo の中で foo と言えば Foo.foo() です。

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

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

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

お礼日時:2008/07/28 14:24

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