我对ruby很新,我一直在编写一些简单的程序。我注意到当我尝试通过命令行运行它时,很多程序都没有创建返回值,但是当我使用repl.it进行测试时似乎工作正常。例如:
def rev(a)
b = []
c = []
b = a.scan(/\w+/)
c = b.map {|x| x.reverse }
return c.join(' ')
end
rev('hello')
如果我使用puts c.join(' ')
,答案将会出现,但不会返回,这是我需要发生的事情。我觉得这很简单。感谢任何帮助,我不得不创建一些奇怪和块状的工作来使我的其他程序工作,但限制了我能够做的事情。
我正在制作这个程序来满足我给出的一些rspec规范,所以简单地打印或给出答案是不够的,我需要将最终术语评估为答案。
答案 0 :(得分:1)
那是因为repl.it向您显示了语句的结果,Ruby不会自动执行。
Ruby 可以这样做,尝试找到名为“IRB”的程序(代表“Interactive Ruby”)。如果您将程序放入其中,您将获得所需的结果。
虽然您可以看到它确实返回了值:
puts(rev('hello'))
repl.it只是自动显示最后一个表达式的结果。
在一个不相关的说明中,这里有一些提示:
return
,因为Ruby会自动返回最后一个语句答案 1 :(得分:1)
Ruby方法自动返回最后一个语句的值。如果你改变了
return c.join(' ')
到
puts c.join(' ')
它会尝试返回puts
的返回值,这不是您想要的。顺便说一下,在这种情况下你可以省略return
。简单地说
c.join(' ')
作为最后一个语句,该方法将使用它作为返回值。
答案 2 :(得分:0)
如果要获取方法的返回值,则必须将其存储在变量中:
answer = rev('hello')
如果你想看到答案 - 正如你在IRB中所做的那样(“repl”)那么你必须要求Ruby输出它:
p answer # Print the result of calling `answer.inspect`
puts answer # Print the result of calling `answer.to_s`