我刚开始学习Ruby,并且在嵌套结构方面遇到了一些麻烦。

我想做的是如果:first的值为“ John”,则返回:last name(“ Doe”):

people = {
  :family => [
    {:first => "John", :last => "Doe"},
    {:first => "Jane", :last => "Smith"}
  ]
}

people[:family].each {|index| return index[:last] if index[:first] == "John"}

但是,控制台给我这个错误:

test.rb:8:in `block in <main>': unexpected return (LocalJumpError)
from test.rb:8:in `each'
from test.rb:8:in `<main>'

当我在控制台中对此进行测试并将“ return”替换为“ puts”时,它使我返回“ Doe”,但是由于某种原因,“ return”似乎导致了“意外的return(LocalJumpError)”。 如何成功返回此值而不会遇到此错误?

谢谢-非常感谢您的帮助!

===============>>#1 票数:1

用价值break

people = {
  :family => [
    {:first => "John", :last => "Doe"},
    {:first => "Jane", :last => "Smith"}
  ]
}

people[:family].each {|index| break index[:last] if index[:first] == "John"}

===============>>#2 票数:1 已采纳

您不能在each循环中使用return 您可以使用mapcollect来返回姓氏数组,如下所示:

people[:family].collect {|index| index[:last] if index[:first] == "John"}
=> ["Doe", nil]

您也可以将匹配项推送到输出变量,如下所示:

output = []
people[:family].each {|index| output << index[:last] if index[:first] == "John"}
=> ["Doe"]

按照建议的方式使用break ,将返回第一个匹配项的字符串,但是如果您有多个匹配项,则该匹配项将对您不起作用。 请参见下面的示例:

people = {
  :family => [
    {:first => "John", :last => "Doe"},
    {:first => "Jane", :last => "Smith"},
    {:first => "John", :last => "Galt"}
  ]
}
people[:family].each {|index| break index[:last] if index[:first] == "John"}
=> "Doe"

===============>>#3 票数:0

return需要在方法内部使用:

def foo
  # your code
end

foo # => "Doe"

===============>>#4 票数:0

puts people[:family].find({}) {|index| index[:first] == "John"}[:last]

  ask by hidace translate from so

未解决问题?本站智能推荐:

1回复

Ruby中意外的','

我在Ruby程序中收到syntax error, 'unexpected ',' 。 ruby解释器和Ruby IDE(Eclipse DLTK)都在同一位置指示错误,但对我来说看起来很好。 如果我注释掉或删除了有问题的行(以及方法的其余部分),语法错误将移至下一个三参数方法定义(不影
1回复

Ruby Fiber中意外的“ \\ n”

我试图将注意力集中在多线程上,所以我在Ruby中玩转Fiber 。 但是,当我尝试运行脚本时,它告诉我在三元语句之后我有一个意外的换行符。 我在这里错过了一些语法吗?
1回复

Ruby on Rails中意外的输出[重复]

这个问题已经在这里有了答案: Rails中的ERB中的<%,<%=,<%#和-%>有什么区别? 7个答案 我一步一步地遵循Ruby on Rails,尽管在我看来我的代码和本教程的代码是完全相同的,但在某些步骤上,我从本教程的视频中得到了截
2回复

嵌套每个do循环在Ruby中意外打印

我有两个包含字符串的数组。 我正在尝试使用嵌套的.each do循环遍历两个数组,以查看第一个数组中的任何元素是否具有第二个数组中的任何元素的子字符串。 我正在使用.include吗? 在嵌套循环中进行检查。 我希望结果是打印的字符串与部分元素匹配的次数。 这是行不通的方法
1回复

Ruby返回意外的零

我有一个RSpec问题。 根据那个问题,我在ruby中写了一个解决方案。 但使用RSpec运行时,当我期望得到的值,我得到nil这里是RSpec的 这是我写的解决方案: 我得到的错误
1回复

在此ruby数据库查询中意外替换了SQL占位符

有人可以解释这里发生了什么吗? 似乎SQL语句字符串中的占位符语法没有按预期方式工作(或者换句话说,它违反了最小惊喜原则),并且在运行时对var2进行了意外的替换/转义: 如果没有SQL占位符,它将起作用(但会将数据库暴露给SQL注入!): 那么什么是使这项工作安全的方法呢?
4回复

“错误的参数数量(1为0)”在Ruby中意味着什么?

“参数错误:错误的参数数量(1表示0)”是什么意思?
1回复

Ruby方法返回意外值

我有一个返回两个3位数字的产品,它是小于制造的最大的回文的方法smaller_than 。 它应尽可能快地运行。 回文数在两个方向上都相同。 由两个3位数字组成的最小回文数为101101,这是143 * 707的乘积。 这是我的代码: 这给了我723327而不是79339
2回复

Ruby - 意外返回(LocalJumpError)

Ruby 2.0 为什么下面的代码会给出意外的返回(LocalJumpError)? Error: unexpected return (LocalJumpError)
3回复

Ruby HAML意外结束错误

有人可以告诉我为什么这让我感到困惑的错误 /Users/frankchen/project/pin_board/app/views/pins/_form.html.haml:17:语法错误,意外的keyword_ensure,期望的keyword_end ...:Util.html_