2014-12-18 61 views
0

我有一個方法需要2個參數 - 要在屏幕上打印的消息和(默認)值。如果默認值是nil那麼我只想將消息打印在屏幕上,否則消息應該在方括號中包含默認值。條件語句在Ruby中沒有像預期的那樣工作

例如:如果我通過method1("Hello" , ""),則應打印Hello,但如果通過method1("Hello", "User"),則應打印Hello [User]:。但現在即使在第二種情況下,它也只能打印Hello

下面是一段我的代碼:

def method1(mes, value) 
    val = "" 
    begin 
    if value == "" || "#{value}".to_i == 0 
     val = ask(mes) do |ch| 
     ch = true 
     end 
    else 
     val = ask(message+" [#{value}]: ") do |ch| 
     ch = true 
     end 
    end 

    if val == "" then 
     val = "#{value}" 
    end 

    rescue => e 
    print "Except occured in method1(#{mes}, #{value}) "+e 
    end 

    return val 
end 
+2

之類的東西' 「#{}值」 to_i'通常毫無意義,因爲'value.to_i'會在這裏完成這項工作。 – tadman

回答

2

這是因爲每一個字符串,它不是一個數字to_i回報0

"User".to_i == 0 
# => true 

所以,在你的代碼:

value = "User" 

if value == "" || "#{value}".to_i == 0 
    puts "was here" 
end 
# => "was here" 

你應該改變你的狀況,也許要檢查是否valuenil或空:

if value.nil? || value.empty? 

如果您使用Rails,你可以使用blank?方法:如果你是如果你只使用使用Rails

value.blank? 

if value.blank? 
+0

感謝您指出錯誤。但嘗試'如果value.nil? || value.empty?'數字失敗。我怎樣才能讓它適用於數字? – itsh

+0

@itsh你可以使用value.nil? || value ==「」 –

+0

我使用'value.to_s'將'value'轉換爲字符串,然後將其與'0'進行比較。有效。這裏是我的工作條件語句'if value.empty? ||值==「0」'。 – itsh

0

紅寶石

empty = input2.respond_to?(:empty?) ? input2.empty? : input2.to_s.length.zero? 

as value.empty?不能在數字

完整的解決方案的工作

def method1(input1, input2) 
    result = input2.respond_to?(:empty?) ? !input2.empty? : input2.to_s.length > 0 
    input2 = "#{ result ? input2 : '' }" 
    puts input2.empty? ? input1 : "#{ input1 } [#{ input2 }]" 
end 

method1('Hello', '') 
method1('Hello', 2) 
method1('Hello', []) 
method1('Hello', [2]) 
method1('Hello', {}) 
method1('Hello', { a: 2 }) 
method1('Hello', false) 

#Output 
Hello 
Hello [Mr] 
Hello [2] 
Hello 
Hello [[2]] 
Hello 
Hello [{:a=>2}] 
Hello [false] 
0

試試這個

def func(mes, val = "") 
    puts val.size != 0 ? "#{mes} [#{val}]" : "#{mes}" 
end 

輸出:

func(123)    # 123 
func("Hello")   # Hello 
func("Hello", 123) # Hello [123] 
func("Hello", "test") # Hello [test] 
相關問題