Ruby中嵌套结构白名单的迭代实现方法问询
关于Ruby中迭代嵌套白名单参数的问题
嘿,我来帮你搞定这个嵌套迭代的问题~首先得先指出你写的示例代码里的两个小问题,然后再给你正确的实现方式。
你的代码里的问题
%i()的嵌套写法错误:%i()是Ruby里用来创建符号数组的字面量,但它只能解析括号内的空格分隔内容为单个符号,没办法识别内部嵌套的%i()。比如你写的%i( %i( name,surname ), %i( startDate, endDate ) ),实际生成的数组是[:%i, :(, :"name,surname", :), :,, :%i, :(, :"startDate, endDate"), :)],这完全不是你想要的嵌套数组结构。%i()内的分隔符用错了:%i()是用空格来分隔符号的,不是逗号。如果写%i(name,surname),得到的是一个单个符号:"name,surname",而不是两个独立的符号:name和:surname。
正确的实现方式
要创建嵌套的白名单符号数组,你需要用普通的数组字面量[]来包裹多个%i()生成的子数组,同时注意%i()内部用空格分隔符号:
# 正确创建嵌套的白名单符号数组 nested_whitelist = [ %i(name surname), %i(startDate endDate) ] # 迭代嵌套数组 nested_whitelist.each do |entry| entry.each do |e| puts e end end
运行这段代码后,会输出:
name surname startDate endDate
额外说明
如果之后你需要更复杂的嵌套结构,也可以直接用符号字面量手动构建数组,比如:
nested_whitelist = [ [:name, :surname], [:startDate, :endDate] ]
这种写法和用%i()的效果完全一致,选你觉得更易读的方式就行。
内容的提问来源于stack exchange,提问作者Hilmi Yamcı
相关产品推荐
相关产品推荐

