2017-02-21 22 views
1

我遇到不必要的重建,而使用這種匹配模式:什麼將(getDirectoryFiles「」(dir</>「//*.c」))實際匹配?

getDirectoryFiles "" $ "foo" </> "//*.c" 

我在Linux上所以從我的理解,第二個參數將評估爲

"foo///*.c" 

而且我相信,這將是不正確將其替換爲

"foo" </> "/*.c" 

因爲這不適用於Windows?然而,在Linux上,這個工作正如我所期望的那樣。

從測試我的結論是模式匹配「foo」之外的文件,這在我的世界中沒有任何意義。作爲一個例子,上面的模式可以在下面的目錄結構中匹配testA.c和testB.c。

foo/testA.c 
bar/testB.c 

我現在有一個<//>運營商看到了,也許我應該用"foo" <//> "*.c"代替,但仍。這是很難找到,"foo///*.c"實際上做什麼?

回答

1

的問題是,</>運營商已定義,以便:

"foo" </> "//*.c" == "//*.c"

這意味着,使用</>創建//價值幾乎從來沒有做正確的事。 <//>解決了這個問題,但正如你所注意的那樣,這不是可預測的,而且相當惡劣。

該解決方案使用foo/**/*.c作爲foo//*.c的替代模式。第一種形式的優點是,它完全可以預測,並且與</>配合使用,無需使用<//>。由於Shake 0.15.6已經是一個允許的選擇,並且在Shake 0.16中,可能會建議超過//

至於其他問題:1)對於Windows,您可以在模式值中互換使用/\,所以編寫foo//*.c就好了。 2)foo///*.c相當於foo//*.c,並且在Shake中有這種形式的廣泛的測試套件。

+0

謝謝,很好的解釋! ''和'「//」'的不幸組合。它讓我很高興它將在0.16中被替換。在0.15.11中,文檔中提到「目前認爲是實驗性的」,這導致我甚至沒有對它進行測試。 – nesqi

相關問題