没有引号的Ruby方法

时间:2011-12-08 15:14:53

标签: ruby

我正在编写一个带有字符串输入的ruby方法,但我不想输入引号。

例如:

def noquotes(input)
  puts input
end

noquotes('12Dec11Bel01')  # --->  12Dec11Bel01

noquotes(12Dec11Bel01)  # --->  Currently yields an error

我希望能够做的是输入没有引号的方法输入(第二个示例)并仍然得到正确的结果。我尝试使用.to_str来确保输入被视为字符串,但它不起作用。

2 个答案:

答案 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是否为字符串,而不是对另一个方法或变量名称的调用。

键入引号作为跳过括号。这是相同数量的字符。