2014-10-30 90 views
2

我有關於在Ruby中匹配運算符的這個愚蠢的問題。爲什麼Ruby會使匹配運算符=~而不是~=?是否有歷史,心理或其他考慮讓前者而不是後者?爲什麼Ruby使用=〜而不是〜=來匹配運算符?

我無法找到任何這信息,我需要就這個意義上說,因爲我繼續鍵入錯誤的東西,由於其他運營商如+=-=!=>=<=地方=右側的其他運營商,而=~則相反。

請使我高興。

+7

我想這是保持與Perl中相同的運算符 – 2014-10-30 16:40:17

+1

Perl從一開始就使用'=〜'和'!〜',即1987. – Stefan 2014-10-30 16:56:37

+1

而AFAIK,用於模式匹配的'〜'來自AWK,它是Perl得到了這個想法。 – 2014-10-30 17:04:29

回答

5

我的意見是它比較一致。他們是幾個「平等」和「匹配」運營商。例如:

=~爲 '匹配'

!~爲 '不匹配'

==爲 '等於'

!=爲 '不等於'

+0

最近我一直在學習Bash,而bash使用'=〜'所以我同意一致性的緣故 – sircapsalot 2014-10-30 17:16:18

2

而且如果你考慮如何用文字閱讀這些符號的方式,它會變得非常有意義:

  • += -=基本上是說a = a + ba = a - b明顯 除了(+)或相減(-)必須先於 分配(=)發生。
  • 作爲比較運營商如>= !=這些道理也因爲 你問比(>)大於或等於(=ba或不 a沒有(!)等於(=b那麼爲什麼不寫呢那樣。
  • 以同樣的方式~=就好像說確實a模式(~) 匹配(=b當你想要的是=~其內容確實a 比賽(=)模式(~b

如果你把它們看作單詞,它會變得相當簡潔。

+0

...並且如果我們寫'(pattern)=〜(string)'? – 2014-10-30 20:48:57

+0

@CarySwoveland對於'Regexp'類來說足夠公平了,我必須去解決其他答案,因爲它更符合一致性,但是如果你看看C源代碼,所有'String#=〜'做的是轉置參數並調用與'Regexp#=〜'相同的方法('rb_reg_match')。雖然'Regexp'處理模式中的變量賦值,而'String'沒有。 – engineersmnky 2014-10-30 20:55:38

相關問題