def bubble_sort_by(array)
sorted = false
until sorted
swapped = false
(array.length - 1).times do |i|
if yield(array[i],array[i+1]) > 0
array[i], array[i+1] = array[i+1], array[i]
swapped = true
end
end
if swapped == false
sorted = true
end
end
array
end
print bubble_sort_by(["hi","hello","hey"]) do |left,right|
left.length - right.length
end
嗨,我正在构建一种对数组进行排序但接受块的方法。该块应采用两个参数,代表当前正在比较的两个元素,并将元素从最小到最大排序。(https://www.theodinproject.com/courses/ruby-programming/lessons/advanced-building-blocks)。
我期待输出打印["hi", "hey", "hello"]
但是它会导致错误消息:
source_file.rb:8:in `block in bubble_sort_by': no block given (yield) (LocalJumpError)
from source_file.rb:7:in `times'
from source_file.rb:7:in `bubble_sort_by'
from source_file.rb:22:in `<main>'
有人可以解释错误来自哪里,我该如何解决?我也意识到,如果我将代码array
(从方法块的倒数第二行)更改为print array
; 代码打印出["hi", "hey", "hello"]
我想要的内容,因此它应该意味着我的代码是正确的。因此,我对错误来自何处以及如何修复它感到困惑?
有人可以解释错误来自哪里
代码中缺少括号。您的块绑定到print
,而不是bubble_sort_by
。
我该如何解决?
一种方法是不在同一行打印,而是使用临时变量
sorted = bubble_sort_by(["hi","hello","hey"]) do |left,right|
left.length - right.length
end
print sorted
另一种方法是使用花括号块语法,它绑定得更牢固。
print bubble_sort_by(["hi","hello","hey"]) { |left,right| left.length - right.length }
最不喜欢的方式(对我来说)是将排序方法放在括号中,这样就可以确定块属于哪个方法:
print(bubble_sort_by(["hi","hello","hey"]) do |left,right|
left.length - right.length
end)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句