1
我怎样才能模拟一个数组的排序期望一个lambda表达式?嘲笑排序摩卡
这是我的问题的一个简单的例子:现在
# initializing the data
l = lambda { |a,b| a <=> b }
array = [ 1, 2, 3, 4, 5 ]
sorted_array = [ 2, 3, 8, 9, 1]
# I expect that sort will be called using the lambda as a parameter
array.expects(:sort).with(l).returns(sorted_array)
# perform the sort using the lambda expression
temp = array.sort{|a,b| l.call(a,b) }
,起初我预期这将工作;然而,我得到以下错误:
- expected exactly once, not yet invoked: [ 1, 2, 3, 4, 5 ].sort(#<Proc:0xb665eb48>)
我知道这不会工作,因为l不作为参数传递给l。但是,还有另外一种方法可以实现这些代码试图完成的任务吗?
注:我已经想出了如何解决我的问题,而不需要弄清楚如何做到上述。为了防止其他人有类似的问题,我会保持这种状态。
干杯, 约瑟夫
嗨,约瑟夫,我是布赖恩。我怀疑这个问题是否可能是“with(l)”造成的。用你使用它的方式,不应该用param“l”来调用? – Shuo 2010-04-06 23:53:58
嘿布莱恩, 这是有道理的。起初,我认为如果你给.sort提供了一个代码块,它会通过l来排序。 所以现在我正在寻找另一种方式来做上面的代码试图做的事情。 我已编辑帖子以明确包含该请求。 – user175750 2010-04-06 23:58:35
我明白了,你已经在你原来的问题中指出了这一点。 :) 我正在使用未安装红宝石的机器。稍后再看这个问题。祝你好运。 – Shuo 2010-04-07 00:08:58