如果在ruby中写两次相同的方法,我们称之为什么呢?

时间:2013-06-14 06:56:39

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我只是想在ruby中探索oops概念

使用mixins继承

重载(不完全是)var arg传递

我只是想在OOPS术语中称之为

class Box
   def method1(str)
      puts "in old method 1"
   end

   def method1(str)
      puts "in new method 1"
   end

end

# create an object
box = Box.new

box.method1("asd")

这是我的ruby类,显然是第二个被定义的执行, 但我正在寻找SO的任何专家理解

2 个答案:

答案 0 :(得分:0)

class Box
   def method1(str="")
      puts "in old method 1"
   end
end

传递默认值

答案 1 :(得分:0)

重载意味着类可以具有相同的方法名称,具有不同的数字参数或不同的参数类型。参考overloading

大多数编程语言都是这种情况,但in Ruby overloading doesn't exist因为ruby更关心调用参数而不是参数类型的方法。参考Duck Typing

代表: -

def add(a, b)
     a + b
end
# Above method will work for the each of the following
# add(2, 3)
# add("string1", "string2")
# add([1,2,3], [4,5,6])

所以,我们必须想知道如何在Ruby中实现重载,并且回答是

   def some_method(param1, param2 = nil) 
     #Some code here
   end
   # We can call above method as 
   # 1. some_method(1)
   # 2. some_method(1, 2)

OR

   def some_method(param1, param2 = nil, param3 = nil) 
     #Some code here
   end
   # We can call above method as 
   # 1. some_method(1)
   # 2. some_method(1, 2)
   # 3. some_method(1, 2, 3)