ruby-on-rails Ruby中的“+”是什么意思?

p8ekf7hl  于 2023-11-20  发布在  Ruby
关注(0)|答案(1)|浏览(154)

此问题在此处已有答案

What is a role of plus in front of a string in ruby?(1个答案)
昨天就关门了。
我刚刚在Ruby on Rails GitHub资源库的pull request中找到了这段代码(简化版):

def foo(string)
  return +"" if string.empty?

  # ...
end

字符串
我想知道+""是什么意思?
前缀+与返回的空字符串""有什么区别?返回+""而不是""string字符串(在本例中,此时该字符串为空)有什么好处?

yizd12fk

yizd12fk1#

+''确保返回的字符串不被冻结,无论文件中的字符串是否被隐式冻结,例如,通过# frozen_string_literal: true魔术注解。
引用关于String#+@的文档:

+stringnew_stringself

如果self未冻结,则返回self
否则返回self.dup,它没有被冻结。
示例如下:

''.frozen?     #=> false
(+'').frozen?  #=> false

字符串
但是对于隐式冻结的字符串:

# frozen_string_literal: true

''.frozen?     #=> true
(+'').frozen?  #=> false


同样,作者决定不简单地返回空的string字符串,因为它可能会被冻结。返回+''可以确保无论环境或输入如何,都返回一个未冻结的空字符串。

相关问题