web-dev-qa-db-fra.com

Comment appelez-vous l'opérateur -> en Ruby?

  1. Comment appelez-vous le -> opérateur comme dans la suite?

    ->(...) do
      ...
    end
    
  2. Les extraits suivants ne sont-ils pas équivalents?

    succ = ->(x) {x + 1}
    succ = lambda {|x| x + 1}
    
194
Matt - sanemat

Dans Ruby Programming Language ("Méthodes, Procs, Lambdas et Fermetures"), un lambda défini à l'aide de -> s'appelle lambda littéral.

succ = ->(x){ x+1 }
succ.call(2)

Le code est équivalent au suivant.

succ = lambda { |x| x + 1 }
succ.call(2)

De manière informelle, j'ai entendu l'appelant stabby lambda ou stabby littéral.

220
kiamlaluno

=> == Hash Rocket

Sépare les clés des valeurs dans un littéral de carte de hachage.


-> == Dash Rocket

Utilisé pour définir un littéral lambda dans Ruby 1.9.X (sans arguments) et Ruby 2.X (avec arguments). Les exemples que vous donnez (->(x) { x * 2 } & lambda { |x| x * 2 }) sont en fait équivalents.

123
Yarin

Lambda fusée

Je l'ai eu de cet article. Mais d’abord une recherche sur Google pour Ruby lambda raccourci http://Ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-) Ruby-1-point-9-et-2-point-0 /

4
Douglas G. Allen

->(x) { ... } est identique à lambda { |x| ... }. Cela crée un lambda. Voir Kernel # lambda Un lambda est un type de proc, celui qui assure que le nombre de paramètres qui lui sont transmis est correct. Voir aussi Proc :: new et Kernel # proc .

1
Cary Swoveland