在方法ruby中调用方法

时间:2016-04-25 20:25:37

标签: ruby methods

我试图弄清楚如何在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;返回,程序结束?

2 个答案:

答案 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 -1testIfZero(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