我需要帮助理解DataGridView
正在做的事情。我知道它的动态,我们将一个方法作为一个块传递给array.partition方法。如果不使用元编程
arr.partition(&a.method('>'))
输出
a=13
arr=[10,11,13,22]
left,right= arr.partition(&a.method('>'))
p left
p right
答案 0 :(得分:2)
它与元编程无关,它只是旧的好红宝石。
left, right = arr.partition(&a.method('>'))
这里真正发生的是:
Method
课程的实例,即Integer#>
(在13
上致电Object#method
)Method#to_proc
(由于&
)Array#partition
。 一步一步:
> 13.method(:>)
#⇒ Integer#>(arg1)
> p = 13.method(:>).to_proc
#⇒ #<Proc:0x005652125f8b50 (lambda)>
> [10, 11, 13, 22].partition &p
#⇒ [[10, 11], [12, 13]]
同样可以通过以下方式实现:
a = 13
arr = [10, 11, 13, 22]
left, right = arr.partition { |element| a > element }
#⇒ [[10, 11], [12, 13]]