J'essaie de définir un DSL où les règles (pour le bien de cet exemple, les règles définissent si quelque chose est "bon" ou "mauvais") sont spécifiées dans un bloc dans Ruby. Ce qui suit est une version (grossièrement simplifiée) de ce que je veux faire:Retour de la méthode block - from appelée dans le bloc?
def test_block
# Lots of other code
is_good = yield # ... should give me true or false
# Lots of other code
end
test_block do
good if some_condition
good if some_other_condition
bad
end
Est-il possible que je peux définir des méthodes et good
bad
qui font la pause bloc? Dans l'exemple ci-dessus, je veux:
- vérifier si some_condition est vrai, et si elle est, sortir du bloc et l'ont return true
- vérifier si some_other_condition est vrai, et si elle est, sortir du bloc et l'ont return true
- return false du bloc sans condition si nous sommes encore dans le
-à-dire que je veux faire se comportent de code ci-dessus comme si je devais writt en bloc comme ceci:
result = test_block do
break true if some_condition
break true if some_other_condition
break false
end
Mettre break
dans la définition de la méthode bonne/mauvaise ne fonctionne évidemment pas. Existe-t-il un autre moyen d'atteindre le résultat souhaité ou devrais-je penser à une façon totalement différente d'y parvenir?
Très pertinent: http://innig.net/software/ ruby/closures-in-ruby.rb –