我试图看看是否可以将Array类'delete_if迭代器重建为我自己的方法,以便查看我是否正确理解方法和块。这是我编码的内容:
def delete_if(arr)
for x in 0...arr.length
if (yield arr[x])
arr[x]=arr[x+1,arr.length]
redo
end
end
end
arr = [0,1,2,3,4,5]
delete_if(arr) {|value| value % 2 == 0}
这导致错误,指出在最后一行中无法识别%方法。我知道这个值将是一个整数,所以我不确定为什么它会说这个错误。有人可以解释一下吗?另外,在Ruby中,你怎么能确定有人将正确的类型传递给方法?如果该方法应该接受一个字符串但是它们传入一个整数怎么办 - 你怎么防止这个?
谢谢!
答案 0 :(得分:1)
def delete_if arr
for x in 0...arr.length
return if x >= arr.length
if yield arr[x]
arr[x..-1] = arr[(x + 1)..-1]
redo
end
end
end
我修复的事情:
有必要改变数组,如果您所做的只是分配给参数,那么您的更改将是方法的本地更改。就此而言,您将计算出的数组对象分配给原始数组的元素,这是错误消息的直接原因。
由于阵列可能变短,我们需要在(新)端拯救
当然你可以使用arr.delete_at x
但我无法在不保留代码模式的情况下更正切片分配