Ruby 在循环中,作为参数传递给'redo',以更改当前迭代';s元素
我听说在数组上循环时不可能修改数组。但我想在这里发帖子,确认我没有错过什么把戏或什么 让我给你一点代码来解释。这种方法需要一系列的“配料”,即面包片,然后做两个改变:烤面包,然后添加黄油Ruby 在循环中,作为参数传递给'redo',以更改当前迭代';s元素,ruby,Ruby,我听说在数组上循环时不可能修改数组。但我想在这里发帖子,确认我没有错过什么把戏或什么 让我给你一点代码来解释。这种方法需要一系列的“配料”,即面包片,然后做两个改变:烤面包,然后添加黄油 ingredients = ["bread", "toast"] buttered_slices = ingredients.map do |ingredient| if ingredient.eql?("toast") next "buttered_toast" else # idea
ingredients = ["bread", "toast"]
buttered_slices = ingredients.map do |ingredient|
if ingredient.eql?("toast")
next "buttered_toast"
else
# ideally the ingredient variable would be "toast"
# for the next iteration
redo "toast"
end
end
说清楚一点,这是行不通的。redo
不关心给定的参数,代码进入无限循环
我对这个问题进行了一些编辑,使代码更加简洁,不像伪代码那样。我还将标题更改为更具体的为什么不这样解决它:
def turn_each_ingredient_into_buttered_toast(ingredients)
ingredients.map do |ingredient|
unless ingredient.is_a?(Toast)
ingredient = ingredient.to_toast
end
ingredient.to_buttered_toast
end
end
实际上,您并没有重做迭代,但得到了相同的结果
另外值得注意的是,除了下一次调用
之外,对黄油切片的赋值是不必要的。为什么不这样解决呢:
def turn_each_ingredient_into_buttered_toast(ingredients)
ingredients.map do |ingredient|
unless ingredient.is_a?(Toast)
ingredient = ingredient.to_toast
end
ingredient.to_buttered_toast
end
end
实际上,您并没有重做迭代,但得到了相同的结果
同样值得注意的是,除了@Albin提供的方法外,对butted_切片
的赋值以及下一次
调用都是不必要的。除了@Albin提供的方法外,还可以通过重做
实现相同的功能。你写了“理想的”成分“将是重做的‘烤面包’”——就这么做
buttered_slices = ingredients.map do |ingredient|
if ingredient.is_a?(Toast)
next ingredient.to_buttered_toast
else
ingredient = ingredient.to_toast
redo
end
end
如文档所示,保留绑定,包括局部变量的绑定
坦率地说,我不明白为什么采用如此繁琐的方法:
buttered_slices = ingredients.map do |ingredient|
(ingredient.is_a?(Toast) ? ingredient : ingredient.to_toast).to_buttered_toast
end
除了@Albin提供的方法外,还可以通过redo
实现相同的功能。你写了“理想的”成分“将是重做的‘烤面包’”——就这么做
buttered_slices = ingredients.map do |ingredient|
if ingredient.is_a?(Toast)
next ingredient.to_buttered_toast
else
ingredient = ingredient.to_toast
redo
end
end
如文档所示,保留绑定,包括局部变量的绑定
坦率地说,我不明白为什么采用如此繁琐的方法:
buttered_slices = ingredients.map do |ingredient|
(ingredient.is_a?(Toast) ? ingredient : ingredient.to_toast).to_buttered_toast
end
尽管有你的例子,我不明白代码应该做什么。什么是涂黄油的吐司
和吐司
(它们做什么/返回什么)?你为什么要检查成分的类型(还有哪些其他类别)?为什么要同时执行两个单独的操作?也许添加一些基本类(即Toast
和另一个“component”类)以及输入数组和预期输出会有所帮助。尽管有你的例子,我不明白代码应该做什么。什么是涂黄油的吐司
和吐司
(它们做什么/返回什么)?你为什么要检查成分的类型(还有哪些其他类别)?为什么要同时执行两个单独的操作?也许添加一些基本类(即,Toast
和另一个“成分”类)以及输入数组和预期输出会有所帮助。redo
是一个关键字,而不是一个方法。@cremno感谢您提到这一点。我很好奇是否有办法覆盖它。另外,我也不确定如何为redo
编写包装器方法redo
是一个关键字,而不是一个方法。@cremno感谢您提到这一点。我很好奇是否有办法覆盖它。还不确定如何为redo
编写包装器方法。