Ruby块方法帮助

时间:2011-06-08 02:11:33

标签: ruby ruby-on-rails-3 methods

我试图看看是否可以将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中,你怎么能确定有人将正确的类型传递给方法?如果该方法应该接受一个字符串但是它们传入一个整数怎么办 - 你怎么防止这个?

谢谢!

1 个答案:

答案 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但我无法在不保留代码模式的情况下更正切片分配