Ruby中object.method(a,b)和method(a,b)有啥区别
Posted
技术标签:
【中文标题】Ruby中object.method(a,b)和method(a,b)有啥区别【英文标题】:What is the difference between object.method(a,b) and method(a,b) in RubyRuby中object.method(a,b)和method(a,b)有什么区别 【发布时间】:2014-09-14 22:11:53 【问题描述】:我对编程非常陌生,并且正在尝试学习 Ruby。目前我无法完全理解方法。我明白:
方法允许我执行一段代码而不必重写它,这样的方法看起来像:
example_method
参数允许我将值传递到方法中的代码中,以代替方法中定义的占位符。这样我就可以执行一组具有不同输入的代码。带参数的方法如下所示:
example_method( x , y )
但是我对对象上的方法的实例化实际上在做什么感到困惑。例如:
object.example_method( x, y )
这是什么意思?为什么将方法附加到带有句点符号的对象上?我们这样做是为了在我们的方法中引用对象的 Instance / Class variables 吗?还有其他理由这样做吗?
例如如果:
def example_method(x , y)
x * y
end
object.exaple_method(a , b)
会和example_method(a , b)
一样吗?
感谢您的帮助,如果我不清楚,请见谅。
【问题讨论】:
记得编辑您的帖子并正确格式化代码。 【参考方案1】:Ruby 是一种Object Oriented 语言。这意味着对象不仅有成员(=state),也有方法(=behavior)。当您在对象上调用方法时(在这种情况下,对象被称为调用者),运行的方法是对应于此对象的类型行为的方法。
当您调用没有调用者的方法时,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"
【讨论】:
谢谢!现在开始点击。如果调用者没有 Local Scope 方法,它会继承 Global Scope 方法吗? @Cu1ture 尝试调用对象类型中不存在的对象的方法将导致undefined method
错误
感谢回复,当调用没有Caller的方法时,程序的全部内容是否被视为该方法正在调用的对象?
@Cu1ture - 这取决于您从哪里调用它。如果您从within 一个对象(在其方法之一中)调用它 - 对象本身被认为是调用者。如果它是在全局作用域本身上调用的,那么是的,全局作用域本身就是一个对象。
有道理!谢谢 Uri,你真的帮我解决了这个问题。现在尝试理解类方法:)【参考方案2】:
如果我正确地假设您的要求是类方法与实例方法
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
【讨论】:
感谢回复,更多的是我不明白对象上调用的方法和对象上不调用的方法的区别。 @Cu1ture:总是在对象上调用方法。如果您没有明确指定接收者,则接收者隐含为self
。以上是关于Ruby中object.method(a,b)和method(a,b)有啥区别的主要内容,如果未能解决你的问题,请参考以下文章