我最近创建了一个pull request for a gem,它基于travis构建,针对相当古老的ruby版本,以实现向后兼容。
在我的提交中,我想在一些作为哈希参数传递的方法选项中引入白名单。
在最近使用ruby版本的Rails中,它看起来像:
MY_WHITELIST = %i(a b c)
def my_method(options={})
@options = options.slice(*MY_WHITELIST)
end
为了在独立gem中授予向后兼容性,我提供了一个类似的解决方案:
MY_WHITELIST = [:a, :b, :c]
def my_method(options={})
@options = options.select { |k, _| MY_WHITELIST.include?(k) }
end
ruby 1.9.3
的传递,但为1.8.7
引发了以下异常:
TypeError: Symbol as array index
根据documentation,这种初始化数组的方法应该被接受。
你有没有使用经验?你会建议什么?
答案 0 :(得分:0)
根据@mr_sudaca的评论中的建议,解决方案是在数组上进行选择:
Hash[options.to_a.select { |k, _| MY_WHITELIST.include?(k) }]