【问题标题】:unable to print output from my method, local jump error [duplicate]无法从我的方法打印输出,本地跳转错误 [重复]
【发布时间】:2018-02-02 12:47:07
【问题描述】:
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"],这是我想要的,因此它应该意味着我的代码是正确的。因此,我对错误来自哪里以及如何修复它感到困惑?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    有人可以解释错误来自哪里

    您的代码中缺少括号。您的块绑定到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)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2014-02-27
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多