2 Stimmen

"_"_Parameter des Ruby-Blocks

Ich habe das gesehen, als ich den ZenTest-Quellcode gelesen habe:

Hier ist die Definition der Methode add_mapping:

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

In der Autottest.initailize() wird add_method aufgerufen, um Mappings für Implementierungen hinzuzufügen.

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

Meine Frage ist, was "_" bedeutet, der zweite Parameter im Block? Es scheint, dass er im Block nicht verwendet wird.

Danke

6voto

a2800276 Punkte 3093

Es handelt sich um ein idiomatisches Ausdruck, der verwendet wird, um anzugeben, dass der an '_' gebundene Parameter nicht verwendet wird, obwohl er erforderlich ist, um an den Block/die Methode übergeben zu werden.

Beispiel:

def blah
   yield 1,2
end

blah {|a,b|
  puts a
  # b wird nie verwendet
}

Im Vergleich zum identischen:

blah {|a,_|
   puts a
}

Beachten Sie, dass '_' ein völlig legaler Variablenname in Ruby ist, daher sind die beiden Versionen identisch, das Folgende funktioniert auch:

blah {|a,_|
   puts _
}

Die Verwendung von '_' ist nichts anderes als eine Konvention, ähnlich wie die Verwendung von i für Zähler, 'x' und 'y' oder 'foo' und 'bar'.

Es bedeutet, dass du cool bist, weil du dich mit funktionaler Programmierung beschäftigt hast, was ich glaube, wo dieses Idiom herkommt...

4voto

Ryan Bigg Punkte 104835
def Tiere
  yield "Tiger"
  yield "Giraffe"
end
Tiere { |_| puts "Hallo, #{_}" }

Beispiel gestohlen von http://en.wikibooks.org/wiki/Ruby_Programming/Ruby_Basics

Soweit ich sehen kann, definiert es _ als eine Variable, die später referenziert werden kann. Dies zwingt Ruby einfach dazu, _ als den Wert dessen zu definieren, was zurückgegeben wird.

2voto

Sophie Alpert Punkte 133000

Vielleicht verwendet der Autor es als kurzen Variablennamen, damit der zweite Parameter ignoriert werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X