Как вызвать экземпляр, только если он определен при создании объекта? - PullRequest
0 голосов
/ 18 апреля 2020

Эй, ребята, все еще пытаетесь освоить это, но как мне вызвать экземпляр объекта, если он определен, и не будет вызывать его, если экземпляр не определен. В основном, переопределение или перегрузка конструктора. Я верю, что это так.

Я проиллюстрирую, что я имею в виду. В приведенном ниже блоке я устанавливаю nil в качестве аргумента по умолчанию для артиста и жанра, но в случае, если я не определяю артиста и жанр экземпляра, я просто не хочу вызывать исполнителя и жанр.

def initialize(name,artist=nil,genre=nil)
  @name = name
  @artist = artist
  @genre = genre
  @song = Array.new      
 end

Это просто какой-то псевдокод, который я написал, чтобы вы знали, что я ищу. Я пытался запустить его в ruby, но ударил блок.

if(artist != nil && genre != nil)
  self.new(@name,@artist,@genre)
else
  self.new(@name)
end

1 Ответ

0 голосов
/ 19 апреля 2020

Нет необходимости обрабатывать позиционные аргументы со значениями по умолчанию

Если вы предоставляете необязательные позиционные аргументы, способ Ruby состоит в том, чтобы передавать только те значения, которые вы должны (или выбираете), и пусть код инициализации или другие методы обрабатывают остальное. Например:

class Playlist
  def initialize name, artist=nil, genre=nil
    @name   = name
    @artist = artist
    @genre  = genre
    @song   = []
  end
end

Playlist.new "Foo"
#=> #<Playlist:0x00007fd63da205d8 @name="Foo", @artist=nil, @genre=nil, @song=[]>

Playlist.new "Bar", "Baz", "Quux"
#=> #<Playlist:0x00007fd63d9c11c8 @name="Bar", @artist="Baz", @genre="Quux", @song=[]>

Как видите, единственным обязательным аргументом является name . Переменные artist и genre по умолчанию устанавливаются в nil, если позиционные значения не передаются. Итак, код работает просто отлично без необходимости создавать сложные операторы if; он обрабатывается самой подписью метода Ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...