簡體   English   中英

Ruby 在這里用 gsub 做什么?

[英]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

文檔: https://ruby-doc.org/core-2.6/String.html#method-i-gsub

我假設最后的 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_idmember_id_hashed

這在 JavaScript 和許多其他使用雙引號將字符串文字括起來的語言中的工作方式相同。


String#gsub是 class String的一種方法,它在字符串中進行搜索和替換並返回一個新字符串。 它的名稱是“全局替代”的縮寫(它替換所有出現)。 要僅替換第一次出現,請使用String#sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM