方法和变量名称是相同的

时间:2010-09-18 11:48:38

标签: ruby

如果方法和变量都具有相同的名称,它将使用变量。

hello = "hello from variable"

def hello
  "hello from method"
end

puts hello

是否有可能以某种方式使用该方法而不更改名称?

4 个答案:

答案 0 :(得分:18)

局部变量和方法之间的模糊性仅出现在没有参数列表的无接收器消息发送中。因此,解决方案显而易见:提供接收器或参数列表:

self.hello
hello()

另见

答案 1 :(得分:13)

试试这个:

puts hello()

答案 2 :(得分:5)

这更多的是评论而非答案,但如果您使用的是分配方法,则区分局部变量和方法至关重要。

class TrafficLight
  attr_accessor :color

  def progress_color
    case color
    when :orange
      #Don't do this!
      color = :red
    when :green
      #Do this instead!
      self.color = :orange
    else
      raise NotImplementedError, "What should be done if color is already :red? Check with the domain expert, and build a unit test"
    end
  end
end

traffic_light = TrafficLight.new
traffic_light.color = :green
traffic_light.progress_color
traffic_light.color # Now orange
traffic_light.progress_color
traffic_light.color # Still orange

答案 3 :(得分:1)

puts self.hello

顺便说一句,我同意Henrik P. Hessel的观点。 这是一段非常可怕的代码。