我想用回調的遞歸方法。
既然你要評估String
,你會是最好延長String
類:
#config/initializers/string.rb #-> should be in /lib
class String
def has? *letters
letters.each do |letter|
yield letter, self.include?(letter)
end
end
end
#app
this = "allthisstuff"
this.has?("a", "f", "s", "d") { |letter,result| puts "#{letter} #{result}" }
# -> a true
# -> f true
# -> s true
# -> d false
以上將允許你使用一個單獨的塊,通過它,你會能夠評估通過letter
:
this.has?("a", "f", "s") do |letter,result|
if result
case letter
when "a"
# do something
when "f"
# do something
end
end
end
-
如果你想包含單獨的塊(JS完全可行),你會想看看「回調」。儘管回調不屬於Ruby
方式嚴格一部分,你可以做到這一點:
#config/initializers/string.rb
class String
def has? **letters
letters.each do |letter,lambda|
lambda.call(letter.to_s, self.include?(letter.to_s))
end
end
end
#app
this.has?({
a: Proc.new {|letter,result| # do something },
b: Proc.new {|letter,result| # do something else }
})
爲了改善這一點,那將是最好找的arglist
等值SASS
-
參考文獻:
如果您關心的是最後一點的效率,請不要使用Rails方法。你爲什麼不使用普通的'include?'?你在做什麼沒有意義。 – sawa
你對我看起來很好(除了使用'include?')。如果「那麼做所有這些東西」很短,如果this.include?(「a」)或者'<那麼做所有這些東西>除非this.include?(「z」 )' –
可以超過1個條件成立嗎? – MZaragoza