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

解決済みの質問

Rubyのクラス

class Test
def initialize
@ary = Array.new(size){false}
end

def print
_print
end

def _print
print"#{@ary}"
end
end

test = Test.new(5)
test.print

上記のプログラムはエラーが出て実行できません。期待している動作は[false,false,false,false,false]です。どうしてエラーが出るか教えていただきたいです。また、解決策もよろしくお願いします。

投稿日時 - 2011-10-26 14:50:53

QNo.7095511

困ってます

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

ANo2, ANo3で挙げられている部分に加え、printと_printメソッドを交互に呼び合っています。

クラスの階層関係を確かめたいコードだとした場合、
Test#_print側でKernel.printを叩くか、Test#print側でsuperを呼び出して下さい

http://ideone.com/nKHyk

投稿日時 - 2011-10-26 19:48:20

お礼

ありがとうございました。

投稿日時 - 2011-10-27 13:12:46

ANo.4

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

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

回答(4)

initializeメソッドにちゃんと引数つけたらどうなる?
あとどうでもいいけどfalseはfalseでしかないからブロックにしても意味ない。

投稿日時 - 2011-10-26 16:21:20

ANo.2

> D:/ruby/workplace/p/sam.rb:13:in `_visit': undefined method `[]=' for nil:NilClass > (NoMethodError)
> from D:/ruby/workplace/p/sam.rb:8:in `visit'
> from D:/ruby/workplace/p/sam.rb:35:in `<main>'
> というエラーがでます。

本当ですか?
sam.rb が質問文に書かれているコードですか?
8行目に visit とかないですよね?

投稿日時 - 2011-10-26 15:29:38

ANo.1

> 上記のプログラムはエラーが出て実行できません。

質問するときはどんなエラーが出るかを書きましょう。

投稿日時 - 2011-10-26 14:55:00

補足

具体的には、
D:/ruby/workplace/p/sam.rb:13:in `_visit': undefined method `[]=' for nil:NilClass (NoMethodError)
from D:/ruby/workplace/p/sam.rb:8:in `visit'
from D:/ruby/workplace/p/sam.rb:35:in `<main>'
というエラーがでます。

投稿日時 - 2011-10-26 15:10:43

あなたにオススメの質問