ruby - 无方法错误 : undefined method `[]=' for nil:NilClass

标签 ruby

标题错误。出了什么问题? 尝试用哈希值初始化Temperature对象。如果我这样做

puts Temperature.from_celsius(50).in_fahrenheit

然后它工作正常并返回 122.0

但是

Temperature.new(:f => 50)

返回错误。

class Temperature
  attr_accessor :f, :c

  @temp = {:f => 32, :c => 0}

  def initialize(params)
    if params[:f] != nil
      self.class.from_fahrenheit(params[:f])

    else 
      self.class.from_celsius(params[:c])
    end
  end

  def self.from_fahrenheit(temp)
   @temp[:f] = temp 
   @temp[:c] = ((temp - 32.0)/1.8).round(1)

    return @temp
  end

  def self.from_celsius(temp)
    @temp[:c] = temp
    @temp[:f] = (temp * 1.8 + 32).round(1)

    return @temp
  end  

  def in_fahrenheit
    @temp[:f]
  end

  def in_celsius
    @temp[:c]
  end


end

class Hash
  def in_fahrenheit
    self[:f]
  end

  def in_celsius
    self[:c]
  end
end

puts Temperature.from_celsius(50).in_celsius

tempo = Temperature.new(:f => 50)
tempo.in_fahrenheit

最佳答案

正如错误消息所示。您正在 Temperature 实例中的 @temp 上调用 []=,默认情况下为 nil,因为您有没有在任何地方给它分配任何东西。

关于ruby - 无方法错误 : undefined method `[]=' for nil:NilClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078493/

相关文章:

ruby-on-rails - RSpec 的 Rails 帖子抛出 "no route matches"

ruby-on-rails - 需要手动要求 gem

ruby-on-rails - Paypal IPN : Invalid byte sequence in UTF-8

ruby-on-rails - 对记录数组进行两次排序,同时保持初始排序

ruby-on-rails - rails : Using CanCan to define multiple roles depending on instances of single Model?

ruby - 为什么空格会影响 ruby​​ 函数调用?

ruby - 枚举器的 uniq::Lazy

ruby - 在 vim 中为 ruby​​ 自动生成原始代码块

ruby - 如何仅比较两个 Time 对象到小时

ruby-on-rails - 如何遍历 ruby​​ 中的 yaml 哈希结构?