Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何考虑和选择X27;抛接球';?_Ruby - Fatal编程技术网

Ruby 如何考虑和选择X27;抛接球';?

Ruby 如何考虑和选择X27;抛接球';?,ruby,Ruby,我正在做下面的Ruby教程。其中一个练习要求我: 更改最后一个示例以从名为 而是搜索。搜索应将楼层平面作为参数接收 练习与上一个示例(练习前)类似,如下所示: candy = catch(:found) do floor.each do |row| row.each do |tile| throw(:found, tile) if tile == "jawbreaker" || tile == "gummy" end end end puts ca

我正在做下面的Ruby教程。其中一个练习要求我:

更改最后一个示例以从名为 而是搜索。搜索应将楼层平面作为参数接收

练习与上一个示例(练习前)类似,如下所示:

candy = catch(:found) do
    floor.each do |row|
    row.each do |tile|
        throw(:found, tile) if tile == "jawbreaker" || tile == "gummy"
    end
    end
end
puts candy
下面是一个提示:

尝试用方法定义和 带“返回”的“抛出”行

我这样做了:

candy = search do
    floor.each do |row|
    row.each do |tile|
      return tile if tile == "jawbreaker" || tile == "gummy"
    end
    end
end
puts candy

但是收到了错误。谁能告诉我怎样才能得到积极的结果。另外一个问题:为什么在抛出/捕获代码中有catch(:found)和不同的抛出(:found,tile)

我看不出你提到的暗示,但我想他们希望你试试这个:

candy = floor.each do |row|
  row.each do |tile|
     return tile if tile == "jawbreaker" || tile == "gummy"
  end
end
puts candy
让您接收
LocalJumpError
。因为您不能在此处使用
return
。您可以使用
break
,但它只会将您从内部循环中带出,这就是为什么我们使用
throw
-
catch
从嵌套循环中跳出

将上一个示例更改为从名为search的方法返回找到的磁贴。搜索应将楼层平面作为参数接收

从这一点我了解到,这个练习是实现一个名为search的方法,它接收一个楼层平面作为参数。因此,您需要实现一个名为search的方法:

它应该将结果返回给candy,因此调用代码应该如下所示:

candy = search(floor)
puts candy
现在,剩下的就是实现方法体,它将返回结果。为了返回正确的结果,
行。每个
都应该在谓词(
tile==“jawbreaker”| | tile==“gummy”
)为
true时立即停止。你可以用别的东西代替它
find
返回与谓词匹配的第一个元素:

row.find { |tile| tile == "jawbreaker" || tile == "gummy" }

我将把所需的更改保留到外部循环(
楼层。每个
)作为OP的练习。

我的以下尝试通过了练习规范

 def search( floor)
    floor.each do |row|
      row.each do |tile|
        return tile if tile == "jawbreaker" || tile == "gummy"
      end
    end
end

candy = ->(flr) {
   search(flr)
}

puts candy

好吧,我这么做了,这对我很有效。如果您已经在ruby中实现了这一点,那么代码是非常不言自明的

floor = [["blank", "blank", "blank"],
     ["gummy", "blank", "blank"],
     ["blank", "blank", "blank"]]
def search(floor)
floor.each do |row|
row.each do |tile|
  return tile if tile == "jawbreaker" || tile == "gummy"
end
end
end

candy = lambda {|floor| search(floor)}
puts candy.call(floor)
floor = [["blank", "blank", "blank"],
     ["gummy", "blank", "blank"],
     ["blank", "blank", "blank"]]
def search(floor)
floor.each do |row|
row.each do |tile|
  return tile if tile == "jawbreaker" || tile == "gummy"
end
end
end

candy = lambda {|floor| search(floor)}
puts candy.call(floor)