2013-04-20 27 views
0

当我在方法签名中使用时,我会如何强制将irb的行为作为字符串对待?ruby​​ cast方法输入变量作为ruby irb中的字符串

我想创建一个基于irb的计算工具,我想减少在irb shell中使用这个工具的用户的输入。假设我的用户不是Ruby程序员,也不了解Ruby的语法。可能有一些命令行的功能。

我有一个文件

calculator.rb 

这个文件里面是

def calculate(value, units) 

... some logic 

end 

我指导用户火了IRB像这样

irb -r path/to/calculator.rb 

我指示用户键入

calculate(10, inches) 

在irb中获取返回值

我该如何做到这一点,而不需要用户理解他们必须将第二个参数包裹在引号中。换句话说,我不希望用户必须键入

calculate(10, "inches") 

,才有可能施展用户输入的字符串,而不是一个变量标识符它传递给我的方法,我的剧本里过吗?如果没有从根本上打破irb shell,也许我想要做的事情是不可能的?

+0

因为你必须重新编译Ruby本身,所以你会打破IRB。字符串被分隔的期望在解释器本身中定义,并且全部通过它所使用的语言和脚本中的所有内容。如果你这样做,一切都会停下来。 – 2013-04-20 04:16:18

+0

重新编译没有必要,您可以改为使用method_missing。 – 2013-04-20 07:30:01

回答

0

如果这是非程序员如何使用putsgets

def calculate 
    puts "Which number would you like to convert?" 
    number = gets.to_i 
    puts "What do you want to convert it to?" 
    type = gets 
    # your conversion logic 
    puts result 
end 
+0

啊是的,这更有意义。谢谢。 – 2013-04-20 04:06:23

0

您实际上可以按照您使用method_missing请求的方式执行此操作。任何匹配的单位都将被转换为字符串,而不是引发异常。

SO_CALC_UNITS = %w[inches feet yards meters parsecs] 
def method_missing(method) 
    if SO_CALC_UNITS.include?(method.to_s) 
    method.to_s 
    else 
    super(method) 
    end 
end