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

为什么Ruby书中的代码不起作用?,ruby,Ruby,我是从一本书上抄下来的。“Ruby编程终极指南” 版权所有(c)2006-2016 Satish Talim 请查看代码和错误消息。为什么我会犯这个错误 我检查了我的输入,重新输入代码,退出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(mai

我是从一本书上抄下来的。“Ruby编程终极指南” 版权所有(c)2006-2016 Satish Talim

请查看代码和错误消息。为什么我会犯这个错误

我检查了我的输入,重新输入代码,退出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
回溯(最近一次呼叫最后一次):
4:from C:/Ruby25-x64/bin/irb.cmd:19:in`'
3:来自(irb):1
2:from(irb):1:in'times'
1:from(irb):3:in`block in irb_binding'
LocalJumpError(意外返回)
irb(主要):005:0>

返回
用于方法内部。你正在使用它,没有一个

请尝试以下操作:

def get_my_result
    10.times do |num|
        square=num*num
        return num,square
    end
end

get_my_result()

注意:使用此代码时,循环将只执行一次并返回值[0,0]

不清楚在何处使用此值,但不能像在循环中那样返回

代码可能是:

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
语句,除非它有意避免运行方法的其余部分,如:

这里要运行的最后一条语句(
num*num
)是该方法的隐式返回值。许多块都是这样工作的,即使是
if
,其中在Ruby
if
语句中返回值:

choice = if (num > 10)
  "big"
else
  "small"
end

其中,
choice
根据条件最终是这两个字符串中的任意一个。

注意:Ruby是一种区分大小写的语言,大写字母在语法上有特定的含义。变量和方法名称应为小写字母。大写字母表示形式为
ClassName
CONSTANT\u NAME
的常量。我同意在函数中使用camelcase不是Ruby的惯例。但这不会导致错误,这是非常不鼓励的。这样做会给你一个引证。“
return
用于函数内部”-这是错误的。Ruby中没有函数。有方法、块、lambda文本、模块、类和脚本,但没有函数。@tadman这是正确的。Rubycop将给出一个引用。我的意思是它不会影响代码的功能。谢谢你的留言,我更新了我的答案。是哪本书提供了代码示例,所以我可以肯定永远不会推荐它?我想附和anotherm的评论。请告诉我们这是什么书,这样我们可以警告别人。自从Ruby1.8于2003年发布并于2013年结束lifed以来,这段代码就一直不起作用。(事实上,我认为这段代码在Ruby的任何版本中都不起作用,即使它真的起作用了,它也不会做代码试图做的事情。)这本书是《Ruby编程的终极指南》版权所有(c)2006-2016 Satish Talim另外,我想说,返回的一个常见用法是使用保护条款,例如在这里的示例中,
return“这个数字太大了!”如果num>100,这是我经常看到的另一种方法,但我会尽量避免我所说的“意外情况”,比如在
if
中,除非在行尾有足够长的
长度,否则您可能不会意识到它们在那里,因为它们被夹在了窗口之外。一般来说,除了
返回false if x
,任何非平凡的东西都会得到多行处理,因此非常清楚这是一个有条件的
返回
,并且这些条件很容易观察到。
 def square(num)
   if (num > 1000)
     return "That number is way too big!"
   end

   num * num
 end
choice = if (num > 10)
  "big"
else
  "small"
end