我有几个关于Ruby的方法,过程和块的问题让我觉得很奇怪。它们与语法或功能没有太大关系,而是作为决策背后的逻辑。Ruby方法,Proc和块混淆
问题1:
为什么该块可以被传递到方法(例如每个),但它们不能被分配给一个变量?
我知道你可以在程序中传递它们,即p = Proc.new {...}
(使用&p
访问),但是让程序员通过这些方法是没有什么意义的。
问题2:
为什么有方法和程序之间的区别?
举例来说,我可以完成以下两种方式定义一个函数,并调用该函数的任务:
def square(x)
x**2
end
square(3)
=> 9
或
square = lambda {|x| x**2}
square.call(3)
=> 9
为什么分化?例如在Python中,以标准方式定义一个函数,并由square = lambda x: x**2
完成创建函数并将其分配给square
的相同任务。
红宝石声称一切都是对象。块应该是对象,以便与之匹配,并且它们可以作为参数传递,所以它们在某些方面明确地扮演着对象的角色。 – rpjohnst 2009-08-07 17:58:18
可以通过创建一个对象来表示块,proc或lambda,使块可以像对象一样工作。没有这个设备,它们只是语法结构。 – Pinochle 2009-08-07 18:03:33
有块对象 - 这就是lambda {whatever}的目的。 – Chuck 2009-08-07 18:04:16