Оберните вашу строковую конструкцию в метод класса
«Формат с точками» - это действительно набор связанных методов.Хотя вы могли бы предположительно сделать что-то похожее на то, что вы пытаетесь сделать, добавив вывод каждого метода класса в строку в цепочке методов, я бы посчитал это хрупким и неприятным ООП-дизайном.
На семантическом уровне каждый метод в цепочке означает «сделать х возвращаемому значению предыдущего метода».Если вы хотите описать элементы объекта или другой тип инициализации, есть более идиоматические способы сделать это.
Не внося существенных изменений в существующий код, вы можете просто добавить PhoneNumber # createКлассный метод, чтобы сделать тяжелую работу за вас.Например:
module PhoneNumber
def self.create
[self.prefix, self.country, self.code, self.number].join
end
def self.prefix
'+'
end
def self.country
rand(1..9).to_s
end
def self.code
rand(100..999).to_s
end
def self.number
rand(1000000..9999999).to_s
end
end
if __FILE__ == $0
puts PhoneNumber.create
end
Присоединение к массиву объектов String, возвращаемых вашими другими методами класса, является достаточно идиоматичным, семантически понятным и обходит необходимость изменять существующие методы класса, которые в настоящее время могут выполнять другие объекты в ваших программах.полагаться на.Это локализует изменения, что часто хорошо в дизайне ООП.
Параметризация метода или , преобразующая ваш модуль в класс , как описано в других ответах на вашвопрос, также есть разумные альтернативы.Естественно, ваш пробег и стилистические вкусы могут отличаться.