2012-02-07 44 views
0

我已經看過這個Why are there so many slightly different ways to do the same thing in Ruby?但它沒有幫助。對於同樣的事情,有多個稍微不同的語義和語法是恕我直言混淆和適得其反。我試圖找到一些規範或爲什麼會這樣的理由,但他們無處可尋(不同於Java和Python,其中每種語言功能都充分記錄了動機等)。爲什麼有許多方法可以在Ruby中創建字符串?

它不只是字符串,它的一切。我在尋找的是一個通用的解釋,爲什麼日本人認爲有100種方法做同樣的事情比一種明確的方式更好。請記住,我們正在談論編程語言,這不是一種樂器,也不是一把油漆刷,它是一種完成工作並且一路暢快的工具。閱讀一些代碼並不奇怪,爲什麼她使用%<hello kitty>而不是"hello kitty",尤其是當你正在尋找一個bug時。

我看到了標準化的好處,這是一個相關的概念。我希望其他人都這麼做。爲什麼Ruby不支持大約100個自定義HTTP協議版本,出於同樣的原因他們支持100種創建String的方式?

+0

不要擔心,它不是Perl ;-)無論如何,「這就是語言的方式」。郵件列表可能更適合這個問題,但這裏是OT,因爲沒有其他「明確的」答案。 – 2012-02-07 16:59:53

回答

3

有很多不同的方法來創建一個字符串的原因是因爲您可能需要一個字符串的原因很多。由於字符串是許多應用程序的支柱,因此這種設施非常強大且多樣化。

一旦你習慣了它,你會發現其他語言的僵硬的報價系統比任何東西都更令人討厭。 HTML通常需要同時使用單一的'和雙"引用的嵌入式JavaScript或其他屬性,除非你想通過在反斜槓\之前加入反斜槓來渲染你的字符串成爲不可讀的紙漿,你可以用%q[ ... ]類型的方法引用。

任何好的工具箱都有各種工具。不要抱怨你的扳手套很混亂,因爲它有很多不同尺寸的扳手。有時你需要一個特定的,然後你會感激。這些方法中的很多都是從像Perl這樣的語言中借用的,Perl受其他東西如bash的啓發。

典型使用案例:

double_quotes = "typical use case with #{variables}" 
single_quotes = 'strict string literals' 
alternate_double_quotes = %Q[<for html="tags('with both quotes', 'and #{variables}')">] 
alternate_single_quotes = %q[<for html="tags('with both quotes')">] 
inline_string = <<END 
Useful for long blocks of freeform 
text such as sample data or templates. 
END 

我發現,試圖表達包含雙引號的多行字符串作爲經常與SQL的情況下,當%q[ ... ]方法就派上用場了:

execute(%q[ 
    INSERT INTO examples (id, feature_code) 
    SELECT id, CONCAT('example_', feature_code) 
     FROM things 
     GROUP BY foo 
     ORDER BY bar 
]) 

找到[ ... ]配對相對比較容易,但是當您有許多轉義引號時,並不那麼容易。除非你有語法高亮編輯器,否則很容易錯過結束語。

相關問題