我正在编写一个带有字符串输入的ruby方法,但我不想输入引号。
例如:
def noquotes(input)
puts input
end
noquotes('12Dec11Bel01') # ---> 12Dec11Bel01
noquotes(12Dec11Bel01) # ---> Currently yields an error
我希望能够做的是输入没有引号的方法输入(第二个示例)并仍然得到正确的结果。我尝试使用.to_str来确保输入被视为字符串,但它不起作用。
答案 0 :(得分:6)
呵呵,抱歉,但你不能在Ruby中使用语法树。如果您不做引号,它将被解析为变量或方法调用。
你能做的是
def method_missing(meth, *args)
meth.to_s
end
但明智地使用它并使用范围界定,如
class DSL # You'd use that here
def dsl(&block)
instance_eval(block)
end
def method_missing(meth, *args)
meth.to_s
end
def noquotes(input)
puts input
end
end
def dsl(&block)
DSL.new.dsl(&block)
end
dsl do
noquotes(foobar)
end
谨慎使用,并且只有在您知道自己在做什么的情况下!而且只在DSL中。甚至没有。真。不要这样做。
答案 1 :(得分:1)
如果不做可怕的维护 - 噩梦,这是不可能的。想想Ruby解释器如何解析你的输入。如果没有引号,则无法知道12Dec11Bel01
是否为字符串,而不是对另一个方法或变量名称的调用。
键入引号作为跳过括号。这是相同数量的字符。