Ruby在这里用gsub做什么?

Ruby在这里用gsub做什么?,ruby,Ruby,我正在将代码从Ruby转换为Node.js。我在一个函数的末尾遇到了这些行,我很好奇最初的开发人员试图实现什么: url = url.gsub "member_id", "member_id__hashed" url = url.gsub member_id, member_id_hashed url 我假设最后的url是Ruby的等价于returnurl 至于带有gsub的行,根据我在网上找到的,这是错误的语法,对吗?难道不是: url=url.gsub(var1,var2)

我正在将代码从Ruby转换为Node.js。我在一个函数的末尾遇到了这些行,我很好奇最初的开发人员试图实现什么:

  url = url.gsub "member_id", "member_id__hashed"
  url = url.gsub member_id, member_id_hashed

  url
我假设最后的
url
是Ruby的等价于
returnurl
至于带有
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\u id=“123”
,并且
member\u id\u hashed
是该id的某个哈希版本,则第二行将用哈希版本替换“123”

url.gsub member_id, member_id_hashed
# => "http://somewebsite.com?member_id__hashed=abc"
那么您将从
http://somewebsite.com?member_id=123
http://somewebsite.com?member_id__hashed=abc

文件:

我假设最后的url是Ruby的等价于
返回url

如果该代码确实是方法或块的一部分,则行
url
就是该方法返回的值。这是因为默认情况下,方法中的Ruby中有一个。关键字
return
可以用于(像在许多其他语言中一样)生成方法的早期返回,有返回值或没有返回值


这是错误的语法,对吗?难道不是吗

url=url.gsub(var1,var2)

在Ruby中用于调用方法的参数可以保留在括号中,但也可以在方法名称后面列出,而不带括号

两者:

是正确的,它们产生相同的结果

Ruby中的约定是不在方法参数周围加括号,但这并不总是可能的。其中一种情况是,其中一个参数调用另一个带有参数的方法。
然后,括号用于让解释器和代码的读者都清楚地了解所有内容


如果它是正确的,为什么他们要叫它两次,一次带引号,一次不带引号

同一方法有两个调用,参数不同:

url = url.gsub "member_id", "member_id__hashed"
url.gsub
的参数是文本字符串
“member\u id”
“member\u id\u hashed”

这次参数是变量
member\u id
member\u id\u hash

url = url.gsub member_id, member_id_hashed
这在JavaScript和许多其他使用双引号括起字符串文本的语言中也适用



类的一个方法,它在字符串中执行搜索和替换并返回新字符串。它的名称缺少“全局替换”(它替换所有出现的情况)。只替换第一次出现的用法。

值得注意的是,在URL上单击
gsub
可能会被严重误导。在本例中,如果
123
碰巧出现在URL中的其他地方,那么这也会破坏该值。最好使用直接操作参数,并以更精确的方式重新编写。
url = url.gsub "member_id", "member_id__hashed"
url = url.gsub member_id, member_id_hashed