2014-07-23 146 views
1

我对编程非常陌生,并且正在努力学习Ruby。目前我无法理解方法。我uderstand是:Ruby中的object.method(a,b)和方法(a,b)有什么区别

方法允许我执行的代码块,而无需重写,这样的方法是这样的:

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)

感谢您的任何帮助,抱歉,如果我不清楚。

+0

记住编辑您的帖子,并正确格式的代码。 – Neeku

+0

对不起,谢谢! – Cu1ture

回答

2

Ruby是一种Object Oriented语言。这意味着对象不仅有成员(=状态),而且还有方法(=行为)。当您在对象上调用某个方法时(该对象称为调用者),运行的方法是对应于此对象的类型行为的的方法。

当您调用没有调用者的方法时,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" 
+0

谢谢!现在开始点击。如果调用者没有本地范围方法,它会继承全局范围方法吗? – Cu1ture

+1

@ Cu1ture试图在对象类型中不存在的对象上调用方法将导致“未定义的方法”错误 –

+0

感谢您的答复,当调用没有调用者的方法时,正在考虑的程序的整个内容该方法正在调用的对象呢? – Cu1ture

0

如果我认为正确的东西你问它是一个类的方法VS

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 
+0

感谢您的回复,它更多的是我不明白在对象上调用的方法和在对象上未调用的方法之间的区别。 – Cu1ture

+0

@ Cu1ture:方法总是在对象上调用。如果你没有明确地指定一个接收者,那么接收者隐含地是'self'。 –

相关问题