2016-04-25 126 views
0

我想弄清楚如何在Ruby中的方法內調用方法。在方法ruby中調用方法

這裏是我的代碼:

def testNegative number 
    if number < 0 # No negative numbers. 
    return 'Please enter a number that isn\'t negative.' 
    end 
end 

def testIfZero number 
    if number == 0 
    return 'zero' 
    end 
end 

def englishNumber number 
    testNegative(number) 
    testIfZero(number) 
end 

puts englishNumber -1 
puts englishNumber 0 

目前,我得到的輸出是一個空行,然後「零」。我想知道爲什麼我沒有看到「請輸入一個不是負數的數字」作爲put的輸出englishNumber -1。我該如何解決問題,以便「請輸入非負數的數字」被返回並且程序結束?

回答

1

我會在我的答案中使用下劃線而不是駱駝大小寫,因爲這是人們通常爲Ruby方法所做的。

您的代碼現在不能正常工作,因爲test_negative正在返回一個值,但english_number沒有對值做任何處理。你可以改變english_number到:

def english_number(number) 
    test_negative(number) or test_if_zero(number) 
end 

這樣,如果test_negative返回一個非空和非假值,然後english_number將使用其返回值,而不是打擾運行test_if_zero

以後,如果你需要更多的代碼添加到english_number,你可以做這樣的:

def english_number(number) 
    error_message = test_negative(number) || test_if_zero(number) 
    return error_message if error_message 

    # More lines of code here 
end 

順便說一句,這聽起來像你可能真的要使用異常。當你引發一個異常時,程序將結束,異常消息將被打印給用戶,除非你做了一些事情來處理異常。我會改變test_negative到:第一testNegative(number)

def test_negative(number) 
    if number < 0 # No negative numbers. 
    raise 'Please enter a number that isn\'t negative.' 
    end 
end 
+0

添加關鍵字加薪不爲我工作,因爲我不想在程序結束對英國數的第一個電話。現在添加或工作的解決方案,但一旦這不再是我的代碼的最後一行,它就會被忽略,就像我現在擁有的東西的第一行一樣。 – MattGoldwater

+0

Gwater17:我編輯了我的答案,以顯示如何將更多行代碼添加到'english_number'。但是,爲了未來讀者的利益,我仍然提到了例外情況。 –

0

您的代碼

def englishNumber number 
    testNegative(number) 
    testIfZero(number) 
end 

電話和忽略的結果。

然後它調用testIfZero(number)並將結果返回給調用者。

對於englishNumber -1testIfZero(number)的結果爲零,並且puts寫入空行。

對於englishNumber 0,您會得到預期的字符串'zero'


如果你需要一個結果作爲替代,你必須返回與or條件(或||)的結果。

一個完整的例子:

def testNegative number 
    if number < 0 # No negative numbers. 
    return 'Please enter a number that isn\'t negative.' 
    end 
end 

def testIfZero number 
    if number == 0 
    return 'zero' 
    end 
end 

def englishNumber number 
    testNegative(number) or testIfZero(number) 
end 

puts englishNumber -1 
puts englishNumber 0 

或者用替代語法:

def testNegative number 
    return 'Please enter a number that isn\'t negative.' if number < 0 # No negative numbers. 
end 

def testIfZero number 
    return 'zero' if number == 0 
end 

def englishNumber number 
    testNegative(number) || testIfZero(number) 
end 

puts englishNumber -1 
puts englishNumber 0 

我不知道如果我理解你的意見是正確的,但也許您正在尋找這樣一個解決方案:

def testNegative number 
    puts 'Please enter a number that isn\'t negative.' if number < 0 # No negative numbers. 
end 

def testIfZero number 
    puts 'zero' if number == 0 
end 

def englishNumber number 
    testNegative(number) 
    testIfZero(number) 
end 

englishNumber -1 
englishNumber 0 

puts命令也可以用在方法裏面,不需要返回結果。


備註問題的範圍:一個方法中的方法調用的使用是不是簡單的解決方案(但我認爲你要檢查方法調用的用法)。

我會用:

def english_number number 

    if number < 0 # No negative numbers. 
    return 'Please enter a number that isn\'t negative.' 
    elsif number == 0 
    return 'zero' 
    end 
end 
+0

我明白了。我只想找到一種方式,第一行的結果不會被忽略。有什麼我可以做的嗎? – MattGoldwater

+0

[Davids Answer](http://stackoverflow.com/a/36850553/676874)中的'test_negative(number)或test_if_zero(number)'應該回答你的問題。 – knut

+0

該解決方案的問題是,如果我在那裏結束程序,它只會回答我的問題。一旦'test_negative(number)或test_if_zero(number)'不再是程序的最後一行,那麼每個函數的結果都會被忽略。 – MattGoldwater