1.upto(9) { |x| print x }
Pourquoi cela ne fonctionnera-t-il pas?En Ruby, quelles sont les lignes verticales?
{ print x |x} }
Qu'en est-il de y
?
1.upto(9) { |x| print x }
Pourquoi cela ne fonctionnera-t-il pas?En Ruby, quelles sont les lignes verticales?
{ print x |x} }
Qu'en est-il de y
?
C'est pour les paramètres qui sont passés à votre bloc. c'est-à-dire dans votre exemple, upto
appellera votre bloc avec chaque numéro de 1 à 9 et la valeur actuelle est disponible comme x
.
Les paramètres de bloc peuvent avoir n'importe quel nom, tout comme les paramètres de méthode. par exemple. 1.upto(9) { |num| puts num }
est valide.
Tout comme les paramètres d'une méthode, vous pouvez également avoir plusieurs paramètres dans un bloc. par exemple.
hash.each_pair { |key, value| puts "#{key} is #{value}" }
Les lignes verticales sont utilisées pour désigner les paramètres du bloc. Le bloc est le code inclus dans {}. C'est vraiment la syntaxe du bloc ruby, les paramètres du bloc et ensuite le code.
Ce n'est pas un opérateur; c'est délimiter la liste des arguments pour le bloc. Les barres sont équivalentes aux parens au def foo(x)
. Vous ne pouvez pas l'écrire comme {print x |x}
pour la même raison ceci:
def foo(x)
puts "It's #{x}"
end
ne peut pas être réécrite comme ceci:
def foo
puts "It's #{x}" (x
end
Qu'est-ce que cela signifie? Je ne comprends toujours pas. – TIMEX
Dans le morceau de code que vous avez spécifié, les lignes verticales sont une partie de la syntaxe de définition de bloc. Donc, { |x| print x }
est un bloc de code fourni en tant que paramètre à la méthode upto
, 9
est également un paramètre passé à la méthode upto
.
Le bloc de code est représenté par un lambda
ou un objet de la classe Proc
dans Ruby. lambda
dans ce cas est une fonction anonyme.
Donc, juste pour faire une analogie avec la syntaxe de définition de fonction,
def function_name(foo, bar, baz)
# Do something
end
{ # def function_name (Does not need a name, since its anonymous)
|x| # (foo, bar, baz)
print x # # Do Something
} # end
Qu'est-ce que tout le monde parle de paramètres? Qu'est-ce que ça veut dire!? Je ne suis pas habitué aux expressions lambda. – TIMEX
Les paramètres sont les éléments que vous transmettez à une fonction. Ce n'est pas quelque chose de spécial pour lambdas. http://en.wikipedia.org/wiki/Parameter_%28computer_science%29 – Chuck
Est-ce que | x | toujours écrit exactement juste après le "{"? – TIMEX