我有以下字符串:
s = "[:test1, :test2]"
个
我希望它再次以符号数组的形式结束:
[:test1, :test2]
个
我发现了两个类似的问题:
Ruby: Parsing a string representation of nested arrays into an Array?个
Ruby convert string array to array object个
但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
确实有效,但出于注入方面的考虑,通常不推荐使用.
irb(main):047> eval(test)
=> [:test1, :test2]
我能找到的唯一方法是一些基本的字符串操作,但我想知道是否有更好的方法内置到Ruby中,而不涉及创建自定义函数.
irb(main):046> test.delete("[]:").split(", ").map(&:to_sym)
=> [:test1, :test2]
Ruby 3.2.2以供参考.