有人可以帮我理解下面的代码吗?有人可以解释respond_to吗? :每?
array = [1,2,3,4];
if array.respond_to? :each
puts "1234"
else
puts "5678"
end
我可以理解的代码的结果,但什么是:each
语法?
是:each
一个全局方法吗?为什么我们可以这样写呢?或者我可以如何了解它?
有人可以帮我理解下面的代码吗?有人可以解释respond_to吗? :每?
array = [1,2,3,4];
if array.respond_to? :each
puts "1234"
else
puts "5678"
end
我可以理解的代码的结果,但什么是:each
语法?
是:each
一个全局方法吗?为什么我们可以这样写呢?或者我可以如何了解它?
:each
是一个Symbol
,这有点像String
,但更有限,更有效的比较平等。它是不是的一种方法;它确实是一种方法名称。
respond_to?
是在Object
上定义的方法,几乎所有的Ruby对象都最终从中继承。
当你说[1, 2, 3, 4].each
时,它会发送信息:each
到Array
对象[1, 2, 3, 4]
。 Array
类对象知道它的实例知道在接收到这样的消息时该怎么做,因此Array.respond_to?(:each)
返回true
。基本上,如果array.respond_to?(:each)
是false
,那么array.each
将引发错误。 [请注意,因为p11y在评论中注释,如果array
确实是Array
,那么这将始终返回true
。但程序员可以说谎,并且array
不一定是Array
;例如:array = "not an Array, fooled you!"
]
[1, 2, 3, 4].respond_to? :each
相当于[1, 2, 3, 4].respond_to?(:each)
。
在附注上,如果您想在一行中填充多个语句,那么在Ruby中只需要分号。例如,与C不同的是,分号是语句终止符,在Ruby中它是语句分隔符。因此编写array = [1, 2, 3, 4];
是不好的风格。
+1你解释得好多了。注意:变量'array'实际上命名不好,因为它也可能包含与Array不同的东西,因此检查。 –
谢谢,好点。 – Amadan
谢谢你一吨!现在感觉好多了〜! :D也,我看到一些文档说,如果我们定义一个字符串像: – wiwengweng