empty_block = lambda { }
puts empty_block.object_id
# => 28765760
puts empty_block.class
# => Proc
puts empty_block.class.superclass
# => Object
如你所见,我们创建的这个block有一个 object_id ,属于 Proc 类(这是Ruby里面对一个block的称呼),而这个类本身就是 Object 的子类。
我们甚至可以反过来,从block定义方法(method)。一个方法(method)就是绑定了一个对象的block,从而可以访问对象的“状态”。
下面我来演示一下逆向的用一个方法(method)来创建一个block。有一些更传统的方法来实现前面的问题(同时请原谅我糟糕的对象建模)
class Calculator def add(a, b) return a+b end end puts Calculator.new.add(5, 6) # => 11
这段代码当然能够很好的工作。然后,做一点修改。
class Calculator
def add(a, b)
return a+b
end
end
addition_method = Calculator.new.method("add")
addition = addition_method.to_proc
puts addition.call(5, 6)
# => 11
现在呢,你就把一个传统的方法(method)转换为了一个block!
block化你的代码!
咱们来构造4个block,分别用来进行加减乘除的运算。每个block应该接受两个值作为变量,然后执行操作并返回结果。
Addition = lambda { |a, b| return a+b }
Subtraction = lambda { |a, b| return a-b }
Multiplication = lambda { |a, b| return a*b }
Division = lambda { |a, b| return a/b }
# 使用的时候通过call来使用
Addition.call(5, 6)
# => 11










