我有關於在Ruby中匹配運算符的這個愚蠢的問題。爲什麼Ruby會使匹配運算符=~
而不是~=
?是否有歷史,心理或其他考慮讓前者而不是後者?爲什麼Ruby使用=〜而不是〜=來匹配運算符?
我無法找到任何這信息,我需要就這個意義上說,因爲我繼續鍵入錯誤的東西,由於其他運營商如+=
,-=
,!=
,>=
和<=
地方=
右側的其他運營商,而=~
則相反。
請使我高興。
我有關於在Ruby中匹配運算符的這個愚蠢的問題。爲什麼Ruby會使匹配運算符=~
而不是~=
?是否有歷史,心理或其他考慮讓前者而不是後者?爲什麼Ruby使用=〜而不是〜=來匹配運算符?
我無法找到任何這信息,我需要就這個意義上說,因爲我繼續鍵入錯誤的東西,由於其他運營商如+=
,-=
,!=
,>=
和<=
地方=
右側的其他運營商,而=~
則相反。
請使我高興。
我的意見是它比較一致。他們是幾個「平等」和「匹配」運營商。例如:
=~
爲 '匹配'
!~
爲 '不匹配'
==
爲 '等於'
!=
爲 '不等於'
最近我一直在學習Bash,而bash使用'=〜'所以我同意一致性的緣故 – sircapsalot 2014-10-30 17:16:18
而且如果你考慮如何用文字閱讀這些符號的方式,它會變得非常有意義:
+= -=
基本上是說a = a + b
或a = a - b
明顯 除了(+
)或相減(-
)必須先於 分配(=
)發生。>= !=
這些道理也因爲 你問比(>
)大於或等於(=
)b
a
或不 a
沒有(!
)等於(=
)b
那麼爲什麼不寫呢那樣。~=
就好像說確實a
模式(~
) 匹配(=
)b
當你想要的是=~
其內容確實a
比賽(=
)模式(~
)b
。如果你把它們看作單詞,它會變得相當簡潔。
...並且如果我們寫'(pattern)=〜(string)'? – 2014-10-30 20:48:57
@CarySwoveland對於'Regexp'類來說足夠公平了,我必須去解決其他答案,因爲它更符合一致性,但是如果你看看C源代碼,所有'String#=〜'做的是轉置參數並調用與'Regexp#=〜'相同的方法('rb_reg_match')。雖然'Regexp'處理模式中的變量賦值,而'String'沒有。 – engineersmnky 2014-10-30 20:55:38
我想這是保持與Perl中相同的運算符 – 2014-10-30 16:40:17
Perl從一開始就使用'=〜'和'!〜',即1987. – Stefan 2014-10-30 16:56:37
而AFAIK,用於模式匹配的'〜'來自AWK,它是Perl得到了這個想法。 – 2014-10-30 17:04:29