首页 > 解决方案 > 需要帮助了解 Ruby 动态编程

问题描述

我需要帮助理解arr.partition(&a.method('>'))正在做的事情。我知道它的动态,我们将一个方法作为一个块传递给 array.partition 方法。另外,如果不使用元编程,我将如何实现相同的目标

a=13
arr=[10,11,13,22]
left,right= arr.partition(&a.method('>'))
p left
p right

输出

[10, 11]
[13, 22]
[Finished in 0.3s]

标签: ruby

解决方案


它与元编程无关,它是普通的老红宝石。

left, right = arr.partition(&a.method('>'))

这里真正发生的是:

一步步:

> 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]]

推荐阅读