Что ж, название вопроса может показаться неправильным, но я хочу спросить, как на самом деле работает следующий код?
class Klass < Struct.new(:x, :y, :z)
end
public
def foo
bar
end
def inspect
"Can't override inspect -> #{self.class}"
end
private
def bar
[x, y, z]
end
def baz
send(:class)
end
obj = Klass.new(1, 2, 3)
p obj.foo # => [1, 2, 3]
p obj # => #<struct Klass x=1, y=2, z=3>
p Klass.ancestors # => [Klass, #<Class:0x0000563835a45600>, Struct, Enumerable, Object, Kernel, BasicObject]
Теперь это выглядит как очень плохая практика.Но как это на самом деле работает?