为什么Ruby书中的这段代码不起作用?

时间:2019-05-15 23:26:35

标签: ruby

我从书本上抄下来了。 “ 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>

2 个答案:

答案 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]