Method and variable name is the same

后端 未结 4 398
难免孤独
难免孤独 2020-12-03 18:29

If both a method and a variable has the same name it will use the variable.

hello = \"hello from variable\"

def hello
  \"hello from method\"
end

puts hell         


        
相关标签:
4条回答
  • 2020-12-03 18:52

    This is more of a comment than an answer, but distinguishing between local variables and methods is vital if you're using an assignment method.

    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
    
    0 讨论(0)
  • 2020-12-03 18:57

    The ambiguity between local variables and methods only arises for receiverless message sends with no argument list. So, the solution is obvious: either provide a receiver or an argument list:

    self.hello
    hello()
    

    See also

    • How does ruby allow a method and a Class with the same name?
    • Optional parens in Ruby for method with uppercase start letter?
    0 讨论(0)
  • 2020-12-03 19:01

    Try this:

    puts hello()
    
    0 讨论(0)
  • 2020-12-03 19:10
    puts self.hello
    

    By the way, I agree with Henrik P. Hessel. This is a very horrible piece of code.

    0 讨论(0)
提交回复
热议问题