<<
не является методом (который не является эксклюзивным для Array BTW), но является синтаксисом для определения метакласса
По сути, метакласс - это класс отдельного объекта (некоторые люди называют их одноэлементными классами). Например, если вы определите
x = Foo.new
y = Foo.new
class << x
def quack
"Quack!"
end
end
затем вызов x.quack
вернет "Кряк", но y.quack
выдаст NoMethodError
. Таким образом, код оценивается только на метаклассе X.
Но ... классы тоже объекты, верно? Итак, когда вы оцениваете эту строку, это эквивалентно выполнению
class << Triangle
attr_accessor :sites
end
, который просто определит переменную экземпляра в метаклассе треугольника . Это класс Triange
, который также является объектом, будет иметь переменную экземпляра с именем sides
Больше информации в этом и этом ссылках. Как только вы поймете идею, перейдите к ближайшей консоли IRB и поэкспериментируйте с этим.