Ссылка на хеш-элемент внутри себя - PullRequest
4 голосов
/ 04 мая 2011

У меня довольно короткий вопрос. Можно ли инициализировать хэш что-то вроде этого:

row = {
    :title => "row title",
    :slug => row[:title].paremeterize
}

Другими словами, могу ли я как-то ссылаться на унитарный хеш внутри себя, или я должен сделать это следующим образом:

row = {
    :title => "row title"
}
row[:slug] = row[:title].paremeterize

Спасибо за комментарии. Конечно, этот код не будет работать. Я спросил, есть ли подобный способ, может быть, с другим синтаксисом. Рубин был полон сюрпризов для меня:)

Ответы [ 2 ]

6 голосов
/ 04 мая 2011

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

title = "foobar"

row = {
  :title => title,
  :slug => title.parameterize
}

Еще лучше…

class Row
  attr_accessor :title

  def slug; title.parameterize; end
end

foo = Row.new :title => 'foo bar'
foo.slug    #=> "foo-bar"
0 голосов
/ 04 мая 2011

Если вы выполняете следующее в IRB,

row = {
    :title => "row title",
    :slug => row[:title]
}

вы получите ошибку NoMethodError: undefined method '[]' for nil:NilClass. Так что нет, вы не можете этого сделать, учитывая, что row не был полностью инициализирован в этот момент и является nil объектом.

...