0

我目前正在使用capitalize!

user_input.capitalize!

但是,如果输入大写,则返回 nil。

我知道我可以在没有 的情况下使用该方法!,但它会复制对象并传递它而不是更改对象。

user_input.capitalize

我如何使用!,但它适用于所有情况?

我尝试了downcase一切,capitalize但在某些情况下存在同样的问题。

将所有条目大写的最佳方法是什么?

这是上下文:

The user inputs "works", "Works", "WORKS", or "WoRkS"
case 1) user_input = "works"
case 2) user_input = "Works"
case 3) user_input = "WORKS"
case 4) user_input = "WoRkS"

user_input.capitalize! (case 1,3,4 = "Works"; case 2 = nil)
4

2 回答 2

4

!按照惯例,方法会修改接收器,如果它们不做任何更改,则返回 nil。最安全的方法是使用两行:

user_name.capitalize!
user_name

#tap

user_name.tap do |s|
  s.capitalize!
end

虽然,#tap在这里有点矫枉过正。

于 2013-01-02T21:31:34.687 回答
2

如果您只关心输入是否大写,请使用capitalize!并且不用担心nil.

如果您的代码中的某个点(由于某种原因)不能有 a nil,请不要使用capitalize!. 而是这样做:

user_input = user_input.capitalize

归根结底,无论哪种方式都很好,惯用的,并且会使输入进入您想要的状态。就其本身而言,nil返回值并不是一件坏事——尽管您可能并不总是希望它作为最终的返回值。

于 2013-01-02T21:46:10.843 回答