You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中嵌套结构白名单的迭代实现方法问询

关于Ruby中迭代嵌套白名单参数的问题

嘿,我来帮你搞定这个嵌套迭代的问题~首先得先指出你写的示例代码里的两个小问题,然后再给你正确的实现方式。

你的代码里的问题

  1. %i()的嵌套写法错误:%i()是Ruby里用来创建符号数组的字面量,但它只能解析括号内的空格分隔内容为单个符号,没办法识别内部嵌套的%i()。比如你写的%i( %i( name,surname ), %i( startDate, endDate ) ),实际生成的数组是[:%i, :(, :"name,surname", :), :,, :%i, :(, :"startDate, endDate"), :)],这完全不是你想要的嵌套数组结构。
  2. %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ı

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:32:08