我写了一个斐波那契数列方法并尝试调用它。使用以下代码可以正常工作:
module Fibonacci
class Operation
def fibonacci(n)
num1 = 0
num2 = 1
while num2 < n
puts num2
num1, num2 = num2, num1 + num2
end
end
end
res = Operation.new
puts 'Enter the number upto which Fibonacci needs to be printed:'
n = gets.chomp.to_i
res.fibonacci(n)
end
但是我想有一个单独的方法来接受类中的输入并调用它。
module Fibonacci
class Operation
def input
puts 'Enter the number upto which Fibonacci needs to be printed:'
n = gets.chomp.to_i
end
def fibonacci(n)
num1 = 0
num2 = 1
while num2 < n
puts num2
num1, num2 = num2, num1 + num2
end
end
end
res = Operation.new
res.input
res.fibonacci(n)
end
遇到错误!..我是新手,如果能得到支持,会很有帮助..谢谢
答案 0 :(得分:0)
将代码更改为:
ng-class
并删除def input
puts 'Enter the number upto which Fibonacci needs to be printed:'
n = gets.chomp.to_i
fibonacci(n)
end
。
这是完整的代码:
res.fibonacci(n)
希望这会有所帮助。
答案 1 :(得分:0)
如果您指定了确切的错误,它可能会提供极大帮助,但让我猜测:有点“ NameError
:未定义的局部变量或方法'n'” >
之所以发生这种情况,是因为您在调用fibonacci
时没有传递参数。如果未指定,则可以选择从用户输入中获取变量:
class Operation
def input
puts 'Enter the number upto which Fibonacci needs to be printed:'
gets.chomp.to_i
end
def fibonacci(n = -1)
# HERE
n = input if n <= 0
num1 = 0
num2 = 1
while num2 < n
puts num2
num1, num2 = num2, num1 + num2
end
end
end
res = Operation.new
res.fibonacci(5)
#⇒ 1 1 2 3
res.fibonacci
#⇒ 'Enter the number ...'
答案 2 :(得分:0)
就目前而言,您的代码未使用input
函数的返回值;它消失在以太坊中,并且您的呼叫者正在尝试访问一个未定义的n
。如果您将呼叫代码编写为:
res = Operation.new
res.fibonacci(res.input)
然后,您将返回值从res.input
传递到res.fibonacci
,就可以解决您的直接问题。
除此之外,我认为您的代码中存在一些值得注意的设计问题,您可以考虑一下。函数应该是模块化的,并且避免使用side-effects(例如打印),这会严重限制其功能和灵活性。如果您希望生成斐波那契数并将其用于程序中的其他内容该怎么办?您必须再次重写整个功能。如果只编写一次以填充并返回一个数组,则让调用者决定是否打印输出,将其保存在数据库中,通过套接字发送,反转,然后将其发送到另一个函数中(您知道了)。
请避免使用hard-coded值,例如字符串和数字。您的input
函数只能用于收集斐波那契数字,因此无法工作。如果让呼叫者决定消息内容该怎么办?然后,当您向Operation
类添加更多数学函数时,可以重用相同的input
例程。
我还认为,类似input
的函数不属于Operator
类。我可以看到它在该类中用作实用程序函数,但是它独立于Operator
之类的东西,并且太小了,无法在任何情况下保证其自身的功能。
这里是重新编写,可以在一定程度上缓解这些问题:
module Fibonacci
class Operation
def input(message)
puts message
gets.chomp.to_i
end
def fibonacci(n)
num1 = 0
num2 = 1
result = []
while num2 < n
result << num2
num1, num2 = num2, num1 + num2
end
result
end
end
res = Operation.new
puts res.fibonacci(res.input 'Enter the number upto which Fibonacci needs to be printed:')
end
然后运行示例:
Enter the number upto which Fibonacci needs to be printed:
15
1
1
2
3
5
8
13
在此repl上进行测试。