gpt4 book ai didi

ruby - 使用可枚举获取所有项目#take

转载 作者:太空宇宙 更新时间:2023-11-03 16:27:20 28 4
gpt4 key购买 nike

我怎样才能 Enumerable#take 所有的东西

arr = [1, 2, 3]
# Works
arr.take(1)
# Gives RangeError: float Inf out of range of integer
arr.take(Float::INFINITY)
# Gives RangeError: float Inf out of range of integer
arr.take(1.0/0.0)
# RangeError: bignum too big to convert into `long'
arr.take(1000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000)
# TypeError: no implicit conversion from nil to integer
arr.take(nil)

如果无法使用 Enumerable#take 获取所有项目,那么我必须在 display_results_allowing_all_objects 中使用复杂的代码,而不是在 display_results 中使用简单的代码。

MAX_ROWS = 1

# Simple code: Only two lines long.
def display_results(results)
results_to_display = results.take(MAX_ROWS)
puts results_to_display.map{|result| result.join("\t")}.join("\n")
end

results = [["Foo", 1], ["Bar", 2], ["Baz", 3]]

display_results(results)

NEW_MAX_ROWS = Float::INFINITY

# Convoluted mess: six lines long
def display_results_allowing_all_objects(results)
results_to_display = if NEW_MAX_ROWS == Float::INFINITY
results
else
results_to_display = results.take(NEW_MAX_ROWS)
end
puts results_to_display.map{|result| result.join("\t")}.join("\n")
end

display_results_allowing_all_objects(results)

最佳答案

您可以使用 Enumerable#take_while拿走所有元素

$> arr.take_while { true }
# => [1, 2, 3]

关于ruby - 使用可枚举获取所有项目#take,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22237548/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com