メソッドが4つあります
class Hoge
def hoge1; piyo; end
def hoge2; self.piyo; end
def hoge3; self.send(:piyo); end
def hoge4; self&.piyo; end
private
def piyo; 'Good'; end
end
h = Hoge.new
4つのインスタンスメソッドを実行すると、それぞれ何が返りますか?
h.hoge1
h.hoge2
h.hoge3
h.hoge4
(1..4).each do |i|
begin
puts "hoge#{i}:" + h.send("hoge#{i}".to_sym)
rescue => e
puts "hoge#{i}:'#{e}'"
end
end;
解答
hoge1:Good
hoge2:'private method `piyo' called for #<Hoge:0x007f8142c02770>'
hoge3:Good
hoge4:'private method `piyo' called for #<Hoge:0x007f8142c02770>'
あとがき
ぼくは、h.try(:piyo)
を勘違いしていました。これは、&.
と同じような扱いになります。