Ruby 1.8.7引发TypeError的符号数组:符号作为数组索引

时间:2018-03-27 15:54:30

标签: ruby symbols ruby-1.8.7

我最近创建了一个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,这种初始化数组的方法应该被接受。

你有没有使用经验?你会建议什么?

1 个答案:

答案 0 :(得分:0)

根据@mr_sudaca的评论中的建议,解决方案是在数组上进行选择:

Hash[options.to_a.select { |k, _| MY_WHITELIST.include?(k) }]