我从书本上抄下来了。 “ Ruby编程终极指南” 版权所有(c)2006-2016 Satish Talim http://satishtalim.com/
请参阅代码和错误消息。为什么会出现此错误?
我检查了输入内容,重新输入了代码,退出了irb,再次输入了irb,重新输入了代码,结果相同。我怎么了?
irb(main):001:0> 10.times do |num|
irb(main):002:1* square = num * num
irb(main):003:1> return num, square
irb(main):004:1> end
Traceback (most recent call last):
4: from C:/Ruby25-x64/bin/irb.cmd:19:in `<main>'
3: from (irb):1
2: from (irb):1:in `times'
1: from (irb):3:in `block in irb_binding'
LocalJumpError (unexpected return)
irb(main):005:0>
答案 0 :(得分:3)
目前尚不清楚该在何处使用,但您不能return
那样在循环内使用。
代码可能是:
def squared
10.times do |num|
square = num * num
yield num, square
end
end
您将以某种方式在外部进行呼叫的地方:
squared do |num, square|
puts "The square of #{num} is #{square}"
end
此代码的简化版本是:
def square(num)
return num * num
end
这里return
在有效上下文中。 Ruby倾向于避免显式的return
语句,除非有意避免运行方法的其余部分,如:
def square(num)
if (num > 1000)
return "That number is way too big!"
end
num * num
end
最后一条要运行的语句(num * num
)是方法的隐式返回值。许多块都以这种方式工作,甚至if
也是如此,其中在Ruby if
语句中返回值:
choice = if (num > 10)
"big"
else
"small"
end
根据条件,choice
最终是这两个字符串中的一个。
答案 1 :(得分:-2)
return
用于方法内部。您正在使用它而没有一个。
尝试以下操作:
def get_my_result
10.times do |num|
square=num*num
return num,square
end
end
get_my_result()
注意:使用此代码,循环将仅执行一次并返回值[0,0]