我不明白第一行的结果.如果文件有文件名,则应该返回没有扩展名的文件名.有人可以向我解释为什么会这样,并告诉我这里更合适的是什么?
irb(main):003:0> 'fafeafeafewafeawfeaw'.sub!(/\.[^\.]*$/, '')
=> nil
irb(main):004:0> '.fafeafeafewafeawfeaw'.sub!(/\.[^\.]*$/, '')
=> ""
irb(main):005:0> 'fafeafeafewafea.wfeaw'.sub!(/\.[^\.]*$/, '')
=> "fafeafeafewafea"
Run Code Online (Sandbox Code Playgroud)
据记载,该子!(与许多!字符串操作一样)如果没有进行任何更改,则返回nil.
来自文档
如果没有执行替换,则执行String#sub的替换,返回str或nil.
而是使用常规子.在你的情况下,额外的爆炸(!)是不必要的.
'fafeafeafewafeawfeaw'.sub(/\.[^\.]*$/, '')
sub和之间的区别sub!是微妙的.但是在ruby中,方法的非爆炸(!)版本更安全.因为按照惯例,爆炸意味着该方法具有更多的副作用.
在的字符串函数(和许多阵列/枚举函数)的情况下的爆炸装置的方法呼叫者的内容进行操作,而不是使(和返回)的副本.
s = 'fafafa'
puts s #=> 'fafafa'
puts s.sub(/fa/, 'fo') #=> 'fofofo'
puts s #=> 'fafafa'
puts s.sub!(/fa/, 'fo') #=> 'fofofo'
puts s #=> 'fofofo'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |