方法体中的Ruby未定义变量

时间:2015-08-17 05:18:56

标签: ruby

当我运行此操作时,我收到一条错误消息,指出该城市未定义。 我该怎么办?

 def ticket_format
   text = ""
  tickets.each do |price, artist|
    if city == "chicago"
      text += "#{artist} show will cost #{price}"
    else
      text += "You paid #{price} to see #{artist}"
     end
  end
  text
end

1 个答案:

答案 0 :(得分:2)

使用city的方式意味着它是一个局部变量,即在函数体中定义的,还是在定义ticket_format的同一个上下文中定义的方法。

与Procs和Lambdas(或者Generale中的块)不同,ruby中的方法不是闭包,即它们不会保留定义它们的上下文。因此,即使您在方法

之前定义了城市变量
  city = 'a ctiy'
  def ticket_format

     city == 'a city'
     ...
  end

  # this will raise an error 'undefined local variable or method "city"'
  ticket_format

因此,您是将city作为参数传递,还是在定义city的同一个类中定义方法ticket_format

 def city
   @city 
 end

 def ticket_format
    if city == 'a city'
    ...
 end 

 def ticket_format city
    if city == 'a city'
    ...
 end