ルビーアンダースコア


Ruby プログラマーとして、おそらく次のようなメソッドやブロックを見たことがあるでしょう:

def test(a, b, _); end
proc { |_, a| ... }


しかし、これは正確には何ですか _ブッティー、そしてそれはどのように特別ですか?

アンダースコアは有効なオブジェクト識別子です



はい、_ にアクセスして値を割り当てることができます.また、メソッド名としても使用できます.

def a(_); puts _; end # a(3) prints 3


しかし、IRB で期待するようには機能しません. Rubyコンソールで最後に使用された値を返す

_ = 1
2
_ # returns 2, not 1


二重下線なし __トー:

__ = 1
2
__ # returns 1


明示的に構成された アンダースコアは、他のオブジェクト識別子とは少し異なる方法で処理されます



(>= Ruby 1.9)

def test(_, _); end
def test(__, __); end
def test(__x, __x); end


ただし、

def test(x, x); end # this will cause an error


ルビー アンダースコア _ で構成されている場合、パラメーター名が重複します. .
_ を使用するのが最も一般的です.未使用のパラメーター (プレースホルダー) を表すために使用しますが、上記の例で示したように、他のシンボルを使用して「未使用の var」警告を回避することもできます 🙂