在Ruby中object.method(a,b)和方法(a,b)之间有什么区别

时间:2014-07-23 15:57:12

标签: ruby-on-rails ruby methods arguments

我是编程新手,我正在努力学习Ruby。我现在无法理解各种方法。我理解:

方法允许我执行一大块代码而不必重写它,这样的方法如下:

example_method

参数允许我将值传递给方法中的代码,该代码位于方法中定义的占位符的位置。这样我就可以用不同的输入执行一组代码。带参数的方法如下:

example_method( x , y )

但我对一个对象的方法实例化实际上在做什么很困惑。例如:

object.example_method( x, y )

这是什么意思?为什么方法附加到具有句点符号的对象?我们是否这样做,以便我们可以在方法中引用对象的实例 / 类变量?有没有其他理由这样做?

例如:

def example_method(x , y)
  x * y
end

object.exaple_method(a , b)是否与example_method(a , b)相同?

感谢您的帮助,对不起,如果我不清楚的话。

2 个答案:

答案 0 :(得分:2)

Ruby是一种Object Oriented语言。这意味着对象不仅具有成员(= state),还具有方法(=行为)。当您在对象上调用方法时(对象称为调用者),运行的方法是与此对象的类型行为相对应的方法

当您调用没有调用者的方法时,self隐式地是调用者。从irb,self被视为main或全球范围。

示例:

def my_method(a)
  "#{a} from main"
end

class A
  def my_method(a)
    "#{a} from A"
  end
end

class B
  def my_method(a)
    "#{a} from B"
  end
end

a = A.new
b = B.new

my_method(1)
# => "1 from main"
a.my_method(1)
# => "1 from A"
b.my_method(1)
# => "1 from B"

答案 1 :(得分:0)

如果我正确地假设您要求它的类方法与实例方法

def Object
  def self.example_method(x, y)
    #this is a class method
    x * y
  end

  def example_method(x,y)
    #this is an instance method
    x * y
  end
end

所以现在我们已经在这里定义了他们如何称呼他们

#This called the class method
Object.example_method(3,3) => 9

#To call the instance method we have to have an instance
object = Object.new
object.example_method(3,3) => 9