2013-04-20 45 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