【发布时间】:2019-04-27 01:35:31
【问题描述】:
有人可以说明如何正确格式化此收益声明,为什么我的收益声明方法不正确?运行时,编译器会导致“未定义方法'length'错误。“测试”是主类。
def bubble_sort_by(array)
len = array.length - 1
while len > 0
for i in(1..len)
@left = array[i]
@right = array[i - 1]
yield
if @left - @right > 0
array[i - 1], array[i] = array[i], array[i - 1]
end
end
len -= 1
end
p array
end
Test.bubble_sort_by(%w[hi hello hey]) do |left, right|
left.length - right.length
end
【问题讨论】:
-
如果块是
{ |a,b| a*b }和c = yield(2,3),a和b将分别被分配值2和3,因此块将返回6,这将被分配给变量c。 -
感谢您的回复,卡里。 @CarySwoveland " if yield(array[i-1], array[i]) > 1" 与上面为 if 语句编写的代码有何不同。
-
不,块的主体 (
left.length - right.length) 只能访问由yield直接传递给它的变量,不能访问在执行屈服(bubble_sort_by)。
标签: ruby-on-rails ruby yield