Rubyでは->演算子を何と呼びますか?


205
  1. ->次のように演算子を何と呼びますか?

    ->(...) do
      ...
    end
  2. 次のスニペットは同等ではありませんか?

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

70
「->」をグーグルできないのは面倒です。
ケビン

10
ただし、@ Kevinでは、Stack Overflowの組み込みElastic Searchを使用して次を検索でき"->"ますtitle:"->" [ruby] is:question。キーは引用符を使用することです。

8
Symbolhoundもこれを行うことができます:symbolhound.com/?q
Andrew Grimm

7
煩わしいか迷惑ではないが、 "ruby->"リクエストのグーグルで最初の上位の結果としてこの質問へのリンクを与える。
fl-web

6
@Kevinたぶん過去2年間で状況は変わったかもしれませんが、グーグルruby "->"は私がこの投稿を見つけた方法です:)
Nippysaurus

回答:


238

言語のプログラミングルビー(「方法、手続きオブジェクト、ラムダ、およびクロージャ」)、ラムダは、使用して定義->と呼ばれるラムダリテラル

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

コードは次のものと同等です。

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

非公式には、スタビーラムダまたはスタビーリテラルと呼ばれていると聞きました。


127

=>== ハッシュロケット

ハッシュマップリテラルの値からキーを分離します。


->== ダッシュロケット

Ruby 1.9.X(引数なし)およびRuby 2.X(引数あり)でラムダリテラルを定義するために使用されます。あなたが与える例(->(x) { x * 2 }lambda { |x| x * 2 })は実際には同等です。


10
FYI 優先規則のため、do/ を使用する場合、2つのスタイルは完全に交換可能ではありませんend。これは検査されたラムダを出力しputs -> do 1 endます:。これは、ブロックを通過putsラムダからそれを盗んだと例外ArgumentErrorを引き起こす、:puts lambda do 1 end
ケルビン

1
また、ruby 1.9.3のラムダリテラルは引数を許可します。
ケルビン

3
@ケルビンは、Rubyがではなくputs lambda do 1 endとして解釈しようとするためputs(lambda) do 1 endですputs(lambda do 1 end)。後者は実際に機能します。Rubyは、ブラケットがない場合、putsメソッドではなくメソッドにブロックを渡そうとしlambdaます。
PJSCopeland 2017年

1
@PJSCopeland彼らに同じ行動をさせることはできないと言っているのではありません。私はそれらが構文的に100%交換可能ではないと言います。つまり、すべての場合にドロップイン置換を単純に行うことはできません(ために余分な括弧が必要になる場合があるためlambda)。
ケルビン

@rdurand「Stabby lambdasはRuby 1.9では引数を受け入れることができない」という要約で編集を行いましたか?これは少なくとも1.9.3では正確ではありません-引数は許可されます。
ケルビン


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.