如何将转为字符串的Ruby符号数组还原为符号数组?
将字符串形式的符号数组还原为Ruby符号数组
给定字符串:
s = "[:test1, :test2]"
需要将其转换为实际的符号数组:
[:test1, :test2]
已尝试的方法
JSON.parse 和 YAML.load 解析失败
这两个内置解析方法都无法处理该字符串,会抛出语法错误:
irb(main):043> test => "[:test1, :test2]" irb(main):044> JSON.parse test /Users/[...]/.rbenv/versions/3.2.2/lib/ruby/3.2.0/json/common.rb:216:in `parse': unexpected token at ':test1, :test2]' (JSON::ParserError) irb(main):045> irb(main):045> YAML.load test /Users/[...]/.rbenv/versions/3.2.2/gemsets/rails_test/gems/psych-5.1.1.1/lib/psych/parser.rb:62:in `_native_parse': (<unknown>): did not find expected node content while parsing a flow node at line 1 column 2 (Psych::SyntaxError)
eval 可实现但存在安全风险
eval能直接解析字符串得到目标数组,但由于存在代码注入风险,仅建议在完全可信的输入场景下使用:
irb(main):047> eval(test) => [:test1, :test2]
基础字符串操作有效但不够优雅
目前通过手动字符串处理可以实现需求,但需要逐一清理字符并转换类型:
irb(main):046> test.delete("[]:").split(", ").map(&:to_sym) => [:test1, :test2]
疑问
在Ruby 3.2.2版本中,是否存在无需自定义函数的更优内置方法来完成这个转换?
内容的提问来源于stack exchange,提问作者mochatiger
相关产品推荐
相关产品推荐

