【问题标题】:ruby cast method input variable as string in ruby irbruby cast方法输入变量作为ruby irb中的字符串
【发布时间】:2013-04-20 03:42:00
【问题描述】:

在方法签名中使用时,我将如何强制 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,也许我想做的事情是不可能的?

【问题讨论】:

  • 你会破坏比 IRB 更多的东西,因为你必须重新编译 Ruby 本身。对字符串进行分隔的期望是在解释器本身中定义的,并且贯穿于它使用的语言和脚本中的所有内容。如果你这样做了,一切都会停止。
  • 不需要重新编译,可以使用method_missing。

标签: ruby irb


【解决方案1】:

如果这是针对非程序员的,如何使用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

【讨论】:

  • 啊,是的,这更有意义。谢谢。
【解决方案2】:

您实际上可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2012-06-05
    • 2018-06-13
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多