Duc*_*yen 3 ruby ruby-on-rails
我正在尝试缩短此代码:
if a.nil?
a = "foo"
else
a << "foo"
end
Run Code Online (Sandbox Code Playgroud)
a是一个nil或一个字符串.
我已经尝试了a ||= "foo",a += "foo"但如果a是这些则不起作用nil.
nil.to_s是等于''你可以写
a = a.to_s + 'foo'
Run Code Online (Sandbox Code Playgroud)
或者,替代方案
a = "#{a}foo"
Run Code Online (Sandbox Code Playgroud)
在您的情况下可能无关紧要,但是a +=和之间有区别a <<。
+=为分配一个新字符串a,而旧字符串则保持不变:
a = 'abc'
b = a
a += 'foo'
a #=> "abcfoo" # <- a refers to the new string object
b #=> "foo" # <- b still refers to the original string
Run Code Online (Sandbox Code Playgroud)
这是因为String#+返回一个新字符串。a += 'foo'等同于a = a + 'foo'。
String#<<另一方面,修改现有的字符串,不会创建新的字符串:
a = 'abc'
b = a
a << 'foo'
a #=> "abcfoo"
b #=> "abcfoo" # <- both changed, because a and b refer to the same object
Run Code Online (Sandbox Code Playgroud)
因此,为了缩短代码而不改变其行为,可以使用:
(a ||= '') << 'foo'
Run Code Online (Sandbox Code Playgroud)
a ||= ''指定一个空字符串a,如果a是nil。然后<< 'foo'附加'foo'到a。
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |