Mel*_*lon 48 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1
我正在开发Ruby on Rails应用程序.我的问题更多是关于Ruby语法.
我有一个带有类方法的模型类self.check:
class Cars < ActiveRecord::Base
...
def self.check(name)
self.all.each do |car|
#if result is true, break out from the each block, and return the car how to...
result = SOME_CONDITION_MEET?(car) #not related with database
end
puts "outside the each block."
end
end
Run Code Online (Sandbox Code Playgroud)
我想停止/从跳出each块一次的result是真实的(这是打破eachif块car.name是一样的name参数一次),并返回car其导致真正的结果.如何在Ruby代码中突破?
tbu*_*ann 95
你可以打破break关键字.例如
[1,2,3].each do |i|
puts i
break
end
Run Code Online (Sandbox Code Playgroud)
将输出1.或者,如果要直接返回值,请使用return.
由于您更新了问题,因此代码如下:
class Car < ActiveRecord::Base
# …
def self.check(name)
self.all.each do |car|
return car if some_condition_met?(car)
end
puts "outside the each block."
end
end
Run Code Online (Sandbox Code Playgroud)
虽然您也可以使用Array#detect或Array#any?用于此目的.
tok*_*and 13
我提供了一个糟糕的示例代码.我不是直接从数据库中找到或检查的东西.如果某些条件遇到一次并返回导致真实结果的"汽车",我只需要一种方法从"每个"块中突破.
那么你需要的是:
def check(cars, car_name)
cars.detect { |car| car.name == car_name }
end
Run Code Online (Sandbox Code Playgroud)
如果您只是想知道是否有任何带有该名称的汽车,那么您就可以使用了Enumerable#any?.根据经验,Enumerable#each仅用于做副作用,而不是执行逻辑.