【问题标题】:Referencing hash item inside itself引用自身内部的哈希项
【发布时间】:2011-08-18 17:23:35
【问题描述】:

我有一个非常简短的问题。是否可以使用以下方式初始化哈希:

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

换句话说,我能否以某种方式在其内部引用一个未初始化的哈希,或者我必须这样做:

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

感谢 cmets。当然,这段代码是行不通的。我问是否有类似的方法,也许有不同的语法。 Ruby 对我来说充满了惊喜:)

【问题讨论】:

  • 这看起来很简单,“你试过了吗?如果是,会发生什么?”题。不要听起来刻薄,但除了尝试并告诉你它是成功还是失败之外,我们还能做什么?

标签: ruby ruby-1.9 ruby-1.9.2


【解决方案1】:

你正在以一种相当奇怪的方式处理这个问题。当您遇到尝试以很少记录(或不可能)的方式使用该语言的情况时,请尝试考虑您在做什么。

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"

【讨论】:

  • +1 用于课堂方法。也许你的意思是“class Row
  • 有太多好的方法可以做到这一点。我选择了基础知识,但是如果每一行都只是结构化数据,那么从结构继承的类可能是一个不错的选择。
【解决方案2】:

如果你在 IRB 中运行以下命令,

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

您收到错误NoMethodError: undefined method '[]' for nil:NilClass。所以不,你不能这样做,因为 row 在那时还没有完全初始化并且是一个 nil 对象。

【讨论】:

    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多