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