Blocs de rubis


Vous savez déjà comment Ruby définit les méthodes et comment vous les appelez. De même, Ruby a un concept de blocs. Le bloc

  • est constitué d'une grande quantité de code.

  • Vous devez donner un nom au bloc. Le code dans un bloc

  • est toujours entouré d'accolades {}. Le bloc

  • est toujours appelé depuis une fonction portant le même nom que lui. Cela signifie que si le nom de votre bloc est test, alors vous souhaitez utiliser la fonction test pour appeler ce bloc.

  • Vous pouvez utiliser l'instruction yield pour appeler un bloc.

Syntaxe

block_name{
   statement1
   statement2
   ..........
}

Ici, vous apprendrez comment appeler un bloc en utilisant une simple instruction yield. Vous apprendrez également à appeler des blocs en utilisant l'instruction yield avec des paramètres. Dans l'exemple, vous verrez les deux types de déclarations yield.

yield Déclaration

Regardons un exemple de déclaration de rendement :

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def test
   puts "在 test 方法内"
   yield
   puts "你又回到了 test 方法内"
   yield
end
test {puts "你在块内"}


Le résultat de la L'exemple ci-dessus est :

在 test 方法内
你在块内
你又回到了 test 方法内
你在块内

Vous pouvez également transmettre une instruction de rendement avec des paramètres. Voici un exemple :

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def test
   yield 5
   puts "在 test 方法内"
   yield 100
end
test {|i| puts "你在块 #{i} 内"}


Le résultat de l'exemple ci-dessus est :

你在块 5 内
在 test 方法内
你在块 100 内

Ici, l'instruction yield est suivie par paramètres. Vous pouvez même transmettre plusieurs paramètres. Dans un bloc, vous placez une variable entre deux barres verticales pour accepter des paramètres. Ainsi, dans le code ci-dessus, l'instruction rendement 5 transmet la valeur 5 comme paramètre au bloc de test.

Maintenant, regardez l'instruction suivante :

test {|i| puts "你在块 #{i} 内"}

Ici, la valeur 5 sera reçue dans la variable i. Maintenant, observez l'instruction put suivante :

puts "你在块 #{i} 内"

Le résultat de cette instruction puts est :

你在块 5 内

Si vous souhaitez transmettre plusieurs paramètres, alors l'instruction yield ressemble à this :

yield a, b

À ce stade, le bloc ressemble à ceci :

test {|a, b| statement}

Les paramètres sont séparés par des virgules.

Blocs et méthodes

Vous avez vu comment les blocs et les méthodes sont liés les uns aux autres. Vous utilisez généralement une instruction rendement pour appeler un bloc à partir d’une méthode qui porte le même nom. Par conséquent, le code ressemble à ceci :

#!/usr/bin/ruby

def test
  yield
end
test{ puts "Hello world"}

Cet exemple est le moyen le plus simple d'implémenter des blocs. Vous appelez le bloc de test en utilisant l'instruction yield.

Mais si le dernier paramètre d'une méthode est précédé de &, alors vous pouvez passer un bloc à la méthode et le bloc peut être affecté au dernier paramètre. Si * et & apparaissent en même temps dans la liste des paramètres, & doit être placé après.

#!/usr/bin/ruby

def test(&block)
   block.call
end
test { puts "Hello World!"}


Le résultat de l'exemple ci-dessus est :

Hello World!

Blocs BEGIN et END

Chaque fichier source Ruby peut être déclaré lorsque le le fichier est chargé Un bloc de code à exécuter lorsque le programme termine son exécution (bloc BEGIN) et un bloc de code à exécuter une fois l'exécution du programme terminée (bloc END).

#!/usr/bin/ruby

BEGIN { 
  # BEGIN 代码块
  puts "BEGIN 代码块"
} 

END { 
  # END 代码块
  puts "END 代码块"
}
  # MAIN 代码块
puts "MAIN 代码块"

Un programme peut contenir plusieurs blocs BEGIN et END. Les blocs BEGIN sont exécutés dans l'ordre dans lequel ils apparaissent. Les blocs END sont exécutés dans l'ordre inverse dans lequel ils apparaissent. Une fois exécuté, le programme ci-dessus produit le résultat suivant :

BEGIN 代码块
MAIN 代码块
END 代码块