2013-10-15 10 views
11

Ich habe gerade gelesen den folgenden Code:Was ist das Ruby-Syntax?

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 

ich meine Verwirrung als Kommentar in den Code zu setzen.

Antwort

12

Das Definieren der Methode mit &b am Ende ermöglicht es Ihnen, den Block zu verwenden, der als Proc Objekt an die Methode übergeben wird.

Nun, wenn Sie Proc Instanz haben, [] Syntax ist eine Abkürzung zu call:

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

Dokumentierte hier ->Proc#[]

+3

Nach dem [Ruby-Style Guide] (https: // Github .com/bbatsov/ruby-style-guide) sollten Sie "proc.call()' über 'proc []' oder 'proc.()' für beide lambdas und procs bevorzugen. "* – Stefan

+3

@Downvoter: Bitte erläutern dein Downvote. –

1

Die & Präfixoperator erlauben ein Verfahren zur Herstellung eines übergeben Block als benannte zu erfassen Parameter. zB:

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

jetzt, wenn Sie obige Verfahren wie folgt aufrufen:

wrap { print "Hi " } 

dann würde ausgegeben werden:

Hi Hi Hi