[英]What is Ruby doing with gsub here?
我正在將代碼從 Ruby 轉換為 Node.js。 我在 function 的末尾遇到了這些行,我很好奇原始開發人員試圖完成什么:
url = url.gsub "member_id", "member_id__hashed"
url = url.gsub member_id, member_id_hashed
url
我假設最后的url
相當於 Ruby 的return url;
至於gsub
的行,從我在網上發現的語法錯誤,對嗎? 不應該是:
url = url.gsub(var1, var2)
?
如果它是正確的,他們為什么要調用它兩次,一次帶引號,一次不帶引號?
gsub
對字符串進行全局替換。 如果我不得不猜測,URL 可能是
http://somewebsite.com?member_id=123
如果是這樣,代碼具有以下效果:
url.gsub "member_id", "member_id__hashed"
# => "http://somewebsite.com?member_id__hashed=123"
假設member_id = "123"
,並且member_id_hashed
是 id 的一些散列版本,那么第二行將用散列版本替換 "123"。
url.gsub member_id, member_id_hashed
# => "http://somewebsite.com?member_id__hashed=abc"
So you're going from http://somewebsite.com?member_id=123
to http://somewebsite.com?member_id__hashed=abc
我假設最后的 url 相當於 Ruby 的
return url;
如果該代碼是方法或塊的一部分,那么url
行就是方法返回的值。 這是因為默認情況下 Ruby 中的方法返回在該方法中計算的最后一個表達式的值。 關鍵字return
可用於(如在許多其他語言中)產生方法的早期返回,有或沒有返回值。
那是錯誤的語法,對吧? 不應該
url = url.gsub(var1, var2)
?
用於調用 Ruby 中的方法的 arguments 可以保留在括號中,但它們也可以列在方法名稱之后,不帶括號。
兩個都:
url = url.gsub var1, var2
和
url = url.gsub(var1, var2)
是正確的,它們產生相同的結果。
Ruby 中的約定是不要在方法 arguments 周圍加上括號,但這並不總是可行的。 一種這樣的情況是當 arguments 之一是使用 arguments 調用另一種方法時。
然后使用括號使解釋器和代碼讀者都清楚。
如果它是正確的,他們為什么要調用它兩次,一次帶引號,一次不帶引號?
同一個方法有兩個調用,不同的arguments:
url = url.gsub "member_id", "member_id__hashed"
url.gsub 的url.gsub
是文字字符串"member_id"
和"member_id__hashed"
。
url = url.gsub member_id, member_id_hashed
這次 arguments 是變量member_id
和member_id_hashed
。
這在 JavaScript 和許多其他使用雙引號將字符串文字括起來的語言中的工作方式相同。
String#gsub
是 class String
的一種方法,它在字符串中進行搜索和替換並返回一個新字符串。 它的名稱是“全局替代”的縮寫(它替換所有出現)。 要僅替換第一次出現,請使用String#sub
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.