【发布时间】:2021-10-22 16:08:25
【问题描述】:
我有一些字符串输入,我想验证它是否是有效的 Ruby 符号文字。如果是,则将其转换为符号。否则返回传递的字符串。
例子,
def parse_symbol(str)
... # Validate and convert to Symbol
# Return Symbol if valid Symbol literal
# Otherwise return str
end
input1 = ':foo_bar' #=> Valid Symbol
parse_symbol(input1) #=> :foo_bar
input2 = ':"foo bar"' #=> Valid Symbol
parse_symbol(input2) #=> :"foo bar"
input3 = ':foo bar' #=> Invalid
parse_symbol(input3) #=> :foo bar
input4 = '::"foo_bar"' #=> Invalid
parse_symbol(input4) #=> ::"foo_bar"
... # all other possible valid and invalid symbol literal goes here
str.to_sym # 将每个字符串转换成符号形式
编辑
eval 是在这里使用的昂贵工具吗?
eval(str).is_a?(Symbol) 救援 str
【问题讨论】:
-
为什么
str包含符号文字?您不能只传递字符串内容并使用to_sym将其转换为符号吗?例如。str.to_sym假设str包含'foo_bar'而不是':foo_bar'(尽管后者也可以使用)。或者你是元编程? (定义创建方法/类的辅助方法。) -
字符串从何而来?为什么你需要将它翻译成一个符号,为什么只在某些情况下?这对我来说听起来像是一个 xy 问题。
标签: ruby