2013-10-15 5 views
11

Je viens de lire le code suivant:Quelle est cette syntaxe Ruby?

class Dir 
    def self.create_uniq &b ### Here, & should mean b is a block 
     u = 0 
     loop do 
     begin 
     fn = b[u] ### But, what does b[u] mean? And b is not called. 
     FileUtils.mkdir fn 
     return fn 
     rescue Errno::EEXIST 
     u += 1 
     end 
    end 
    io 
    end 
end 

Je mets ma confusion commentaire dans le code.

Répondre

12

La méthode de définition avec &b à la fin vous permet d'utiliser le bloc passé à la méthode en tant qu'objet Proc.

Maintenant, si vous avez Proc exemple, la syntaxe [] est un raccourci à call:

p = Proc.new { |u| puts u } 
p['some string'] 
# some string 
# => nil 

Documenté ici ->Proc#[]

+3

Selon le (https [Ruby Style Guide]: // github .com/bbatsov/ruby-style-guide) vous devriez * "Préférer' proc.call() 'sur' proc [] 'ou' proc.() 'pour les deux lambdas et procs." * – Stefan

+3

@Downvoter: S'il vous plaît expliquer votre downvote. –

1

L'opérateur préfixe & permettent une méthode pour capturer un bloc passé en nom paramètre. par exemple:

def wrap &b 
    3.times(&b) 
    print "\n" 
end 

maintenant si vous appelez méthode ci-dessus comme ceci:

wrap { print "Hi " } 

alors sortie serait:

Hi Hi Hi 
Questions connexes