我可以拒绝不符合我的标准的对象,因为它们被输入到数组中吗?

时间:2010-12-30 19:15:41

标签: ruby

我知道有很多方法可以在现有的ruby数组中创建新元素。

e.g。

myArray = []
myArray + other_array
myArray << obj
myArray[index] = obj

我也很确定我可以使用.collect.map.concat.fill.replace.insert,{{ 1}},.join.pack也可以添加或修改.push的内容。

但是,我想确保myArray只包含有效的HTTP / HTTPS网址。

任何人都可以解释我如何强制执行这种行为吗?

3 个答案:

答案 0 :(得分:7)

我会创建一个模块,允许您为数组指定接受块,然后覆盖您提到的所有方法(以及更多,如concat),以便在调用{{1}之前预先过滤参数}}。例如:

super

答案 1 :(得分:1)

使用此插入。 (未经测试)。

def insert_to_array(first_array, second_array)
    second_array.each do |i| {
       if URI.parse(i).class == URI::HTTP
         first_array.insert(i)
       end
    }

    first_array
end

答案 2 :(得分:1)

创建一个类来封装您想要的行为。然后,您可以创建执行所需验证的<<方法。

将处理此数据的所有逻辑放在此域类的方法中。可能你会发现围绕使用这些数据移动到新类的代码。

我的2美分。