2009-01-23 5 views
2

j'ai rencontré quand je lis le code source ZenTest:"_" paramètre de Ruby bloc

Voici la définition de la méthode add_mapping:

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

Dans le Autottest.initailize(), add_method obtenir appelé à ajouter la cartographie pour implémentations.

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

Ma question est ce que signifie "_", le deuxième paramètre du bloc? Semble qu'il n'est pas utilisé dans le bloc.

Merci

Répondre

7

C'est un idiome utilisé pour indiquer que le paramètre lié à '_' n'est pas utilisé, même s'il doit être passé au bloc/à la méthode.

exemple:

def blah 
    yield 1,2 
end 

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

comparer à l'identique:

blah {|a,_| 
    puts a 
} 

Notez que '_' est un nom de variable parfaitement légal en rubis, de sorte que les deux versions sont identiques, les œuvres suivantes bien:

blah {|a,_| 
    puts _ 
} 

en utilisant '_' est rien de plus qu'une convention comme l'utilisation i pour les compteurs, 'x' et 'y' ou 'foo' et 'bar'.

Cela signifie que vous êtes cool parce que vous avez été barboteurs avec la programmation fonctionnelle, qui est, je crois, où ce orignates idiome ...

+0

@ a2800276, pourriez-vous s'il vous plaît me montrer des tutoriels ou des ressources sur cet idiome "_"? – eric2323223

+0

Il n'y a pas de tutoriels, c'est juste un idiome, un usage courant. C'est juste un nom de variable comme un autre (j'ai édité l'ost pour le rendre plus clair) "Motif de programmation fonctionnelle de Google correspondant au caractère générique" si vous voulez vérifier l'origine. – a2800276

2

Peut-être que l'auteur ne l'utilise comme un nom court variable, de sorte que le second paramètre peut être ignoré.

+0

Voulez-vous dire l'ici « _ » peut être remplacé par une variable prénom? – eric2323223

+0

C'est vrai, je pense. Comme ce n'est pas utilisé, cela n'a pas d'importance. –

+0

C'est correct. _ est commun dans de nombreuses langues pour un nom de variable qui ne voit pas d'utilisation explicite. Cela signifie "ignorez-moi" –

4
def animals 
    yield "Tiger" 
    yield "Giraffe" 
end 
animals { |_| puts "Hello, #{_}" } 

Exemple de vol http://en.wikibooks.org/wiki/Ruby_Programming/Ruby_Basics

Pour autant que je peux voir, il est la définition _ comme une variable qui pourrait être référencé plus tard. Cela ne fait que forcer la main de Ruby et définir la valeur de tout ce qui est cédé.

+0

@Radar, je pourrais comprendre votre exemple. Mais pourquoi "_" dans ma question fait référence au résultat du bloc? Comment exactement la séquence de l'appel add_method est? Si je comprends bien, le "_" devrait être une référence à la variable "filename". – eric2323223

Questions connexes