为 ruby 使用 guard 转换 raise exception if else
Use guard for ruby convert raise exception if else
Rubocop 不断向我抛出错误:使用保护子句 (raise "no block" if not block_given?
) 而不是将代码包装在条件表达式中。
# frozen_string_literal: true
def bubble_sort_by(arr)
if block_given?
swap = -1
while swap != 0
swap = 0
(0..(arr.length - 2)).each do |i|
if yield(arr[i], arr[i + 1]).positive?
arr[i], arr[i + 1] = arr[i + 1], arr[i]
swap += 1
end
end
end
else
raise "no block"
end
arr
end
#given test
bubble_sort_by(["hey", "hello", "hi"]) {|left, right| left.length - right.length
}
试过 unless 但还是一样,我不明白我应该如何转换为 guard 子句。
如果你用 if-else 包裹整个方法体而 else
只包裹引发错误,你可以重构为:
def bubble_sort_by(arr)
raise "no block" unless block_given?
swap = -1
while swap != 0
swap = 0
(0..(arr.length - 2)).each do |i|
if yield(arr[i], arr[i + 1]).positive?
arr[i], arr[i + 1] = arr[i + 1], arr[i]
swap += 1
end
end
end
arr
end
你有一个条件在上面,方法的主要部分在它之后。
Rubocop 不断向我抛出错误:使用保护子句 (raise "no block" if not block_given?
) 而不是将代码包装在条件表达式中。
# frozen_string_literal: true
def bubble_sort_by(arr)
if block_given?
swap = -1
while swap != 0
swap = 0
(0..(arr.length - 2)).each do |i|
if yield(arr[i], arr[i + 1]).positive?
arr[i], arr[i + 1] = arr[i + 1], arr[i]
swap += 1
end
end
end
else
raise "no block"
end
arr
end
#given test
bubble_sort_by(["hey", "hello", "hi"]) {|left, right| left.length - right.length
}
试过 unless 但还是一样,我不明白我应该如何转换为 guard 子句。
如果你用 if-else 包裹整个方法体而 else
只包裹引发错误,你可以重构为:
def bubble_sort_by(arr)
raise "no block" unless block_given?
swap = -1
while swap != 0
swap = 0
(0..(arr.length - 2)).each do |i|
if yield(arr[i], arr[i + 1]).positive?
arr[i], arr[i + 1] = arr[i + 1], arr[i]
swap += 1
end
end
end
arr
end
你有一个条件在上面,方法的主要部分在它之后。