我试图弄清楚如何在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
目前,我得到的输出是一个空行然后&#34;零&#34;。我想知道为什么我没有看到&#34;请输入一个不是否定的数字&#34;作为put englishNumber -1的输出。我如何解决问题以便&#34;请输入一个不是负面的数字&#34;返回,程序结束?
答案 0 :(得分: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
更改为:
def test_negative(number)
if number < 0 # No negative numbers.
raise 'Please enter a number that isn\'t negative.'
end
end
答案 1 :(得分:0)
您的代码
def englishNumber number
testNegative(number)
testIfZero(number)
end
先调用testNegative(number)
并忽略结果。
然后调用testIfZero(number)
并将结果返回给调用者。
对于englishNumber -1
,testIfZero(number)
的结果为nil,而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