Прежде всего, используйте аргументы ключевого слова, чтобы позволить вам передать соответствующие данные инициализатору (вплоть до вас, если вы хотите включить time_stamp
в качестве ключевого слова или обычного аргумента):
def initialize(cloud_storage: nil, local_storage: nil, time_stamp: nil)
@time_stamp = time_stamp || (Time.now.to_f * 1000).to_i.to_s
@cloud_store_spec = cloud_storage
end
Этобудет намного понятнее при вызове класса, что позволит:
song_full = Song.new(cloud_storage: fromSomeCloudStorage)
song_preview = Song.new(local_storage: fromLocalStorage)
С точки зрения того, как ваш код будет знать, является ли код облачным или локальным, если вы имеете в виду экземпляры класса, вы можете просто проверитьдля присутствия @cloud_store_spec
, что-то вроде:
def cloud_storage?
@cloud_store_spec.present?
end
Затем, из любого места в вашем коде, вы можете позвонить:
song_full = Song.new(cloud_storage: fromSomeCloudStorage)
song_full.cloud_storage? # => true
song_preview = Song.new(local_storage: fromLocalStorage)
song_preview.cloud_storage? # => false
Надеюсь, что помогает, и я читаюВы правы :) Дайте мне знать, как вы ладите или если у вас есть какие-либо вопросы.
Обновление для Ruby 1.9.3
Поскольку аргументы ключевых слов былиПредставленный в Ruby 2.0, для 1.9.3 вы можете использовать хэш опций:
def initialize(options = {}) # again, timestamp can be a separate arg if you'd prefer
@time_stamp = options[:time_stamp] || (Time.now.to_f * 1000).to_i.to_s
@cloud_store_spec = options[:cloud_storage]
end
Остальная часть кода останется прежней.