2

ZenTestのソースコードを読んだときにこれに出会いました。

add_mappingメソッドの定義は次のとおりです。

def add_mapping(regexp, &proc)
  @test_mappings << [regexp, proc]
end

Autottest.initailize()add_method実装のマッピングを追加するために呼び出されます。

self.add_mapping(/^lib\/.*\.rb$/) do |filename, _|
  possible = File.basename(filename).gsub '_', '_?'
  files_matching %r%^test/.*#{possible}$%
end

私の質問は、ブロックの2番目のパラメーターである「_」が何を意味するのかということです。ブロックでは使用されていないようです。

ありがとう

4

3 に答える 3

6

ブロック/メソッドに渡す必要があるにもかかわらず、「_」にバインドされたパラメーターが使用されていないことを示すために使用されるイディオムです。

例:

def blah
   yield 1,2
end

blah {|a,b|
  puts a
  # b is never used
}

同一のものと比較してください:

blah {|a,_|
   puts a
}

'_' は ruby​​ では完全に有効な変数名であるため、2 つのバージョンは同一であることに注意してください。

blah {|a,_|
   puts _
}

'_' の使用iは、カウンター、'x' と 'y' または 'foo' と 'bar' の使用のような規則にすぎません。

それは、あなたが関数型プログラミングに手を出しているので、あなたがクールであることを意味します。私が思うに、このイディオムはそこから生まれました...

于 2009-01-23T13:32:38.633 に答える
4
def animals
  yield "Tiger"
  yield "Giraffe"
end
animals { |_| puts "Hello, #{_}" }

http://en.wikibooks.org/wiki/Ruby_Programming/Ruby_Basicsから盗まれた例

私が見る限り、それは_を後で参照できる変数として定義しています。これは、ルビーの手を強制し、生成されるものの値に関して_を定義するだけです。

于 2009-01-23T05:21:23.103 に答える
2

おそらく、2番目のパラメーターを無視できるように、作成者はそれを短い変数名として使用しています。

于 2009-01-23T05:17:40.520 に答える