2009-01-23 124 views
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 

我的問題是什麼「_」,塊的第二個參數,是什麼意思?似乎它不在塊中使用。

感謝

回答

7

這是一個習慣用於表示綁定到'_'的參數未被使用的習慣用法,儘管它需要傳遞給塊/方法。

例如:

def blah 
    yield 1,2 
end 

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

比較相同:

blah {|a,_| 
    puts a 
} 

注意,「_」是紅寶石完全合法的變量名,所以這兩個版本是相同的,下面的作品well:

blah {|a,_| 
    puts _ 
} 

使用'_'只不過是一個約定,如使用i爲櫃檯,'x'和'y'或'foo'和'bar'。

這意味着你很酷,因爲你已經和函數式編程,這一點,我相信,在這個成語orignates ...

2

也許作者使用它作爲一個短變量名稱,以便第二個參數可以忽略不計。

+0

你的意思是「_」在這裏可以通過任何變量替換涉足名稱? – eric2323223 2009-01-23 05:20:11

+0

沒錯,我想。由於它沒有被使用,所以沒關係。 – 2009-01-23 05:29:33

+0

這是正確的。 _在許多語言中很常見,因爲變量名稱沒有明確使用。這意味着「不理我」 – 2009-01-23 07:01:04

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

來自實例http://en.wikibooks.org/wiki/Ruby_Programming/Ruby_Basics

據我所看到的,它的定義_作爲可在以後引用的變量被盜。這只是迫使紅寶石的手,並確定_什麼是所產生的價值。