放'A'.upcase!返回零。这有点令人困惑,特别是因为'Ab'返回'AB'而不是'B'。这是一个错误还是语言怪癖?
编辑所以我看到了文档,但它似乎仍然违反直觉。什么时候在实际使用场景中有意义?我可以看到它导致的问题多于帮助
编辑 Tihom的答案似乎是最好的答案;他提到的帖子和评论让我明白,Matz和Ruby开发团队很可能是因为数据类型的完整性(字符串应该是不可变的)的一致性而不是英语口语中链式方法的敏感性
似乎是大概的!对于单个字符而言,它有点奇怪,没有实际用途,并且是一种病态案例,对于说英语的人来说确实是违反直觉的。 Tihom指出,Ruby的字符串不变性优先级的其他实例更合理:更直观的例子是gsub !,如果没有进行替换,则返回nil:
“abc”.gsub!('d','')#=>没有
答案 0 :(得分:2)
升级str的内容,如果没有进行任何更改则返回nil。
'Ab'.upcase! # => "AB"
# nil returned as receiver is already upcased.
"A".upcase! # => nil
答案 1 :(得分:2)
使用upcase
而不是upcase!
(upcase!
如果字符串已经大写,则返回nil
):
puts 'A'.upcase
A
答案 2 :(得分:2)
阅读此post,尤其是评论。
实际上它不是那么多的问题。 Ruby的惯例 以'!'结尾的方法这个方法会做点什么 奇怪。在这种情况下,大写!更改String实例。 所以你不应该依赖于返回值,也不应该使用它 分配
惯例是:
some_string.upcase!
因此,upcase!
不应该在赋值中使用,因为它会更改字符串。相反,用途是检查if str.upcase!
之类的真相。更直观的例子是gsub!
,如果没有进行替换,则返回nil:
"abc".gsub!('d','') #=> nil
答案 3 :(得分:1)
根据文件: http://ruby-doc.org/core-2.0.0/String.html#method-i-upcase-21
如果没有进行任何更改, upcase!
将返回nil
。