[Rails] tryと第二引数とdelimitedと
業務中にこんな感じのコードを発見。 (もちろん内容は変えてある)
# book.amountは本の値段(数値) book.amount.try(:to_s, :delimited)
まぁ雰囲気は分かるが、
細かい部分で引っ掛かりを感じたので調査してみた。
するとまぁこんなちょっとしたコードから思いの外学びがあってびっくり。
我ながら全然理解できていなかった;
勉強になったのはざっくり3点。以下で詳細を説明していく。
- tryそのものの復習
- tryの第2引数
- Railsのdelimited
tryについて
tryの基本
Rails のtryメソッドは何となく知っていたが、改めて復習になった。
@person ? @person.name : nil
が
@person.try(:name)
と書けると。
うーん改めてtry便利ー。
RailsのtryとRubyの&.
Rubyの&.と役割が似ている。
共通点と違いは以下参照。
Rubyの&.とRailsの#tryの違いについて - Qiita
端的に言うと、
tryの第2引数の扱い
何とtryの第2引数は、第1引数で指定したメソッドの引数になるらしい。
全く知らなかった。メソッドチェーンでもするのかと思っていた。
つまりこう言うことになる
book.amount.try(:to_s, :delimited)
↓
book.amount ? book.amount.to_s(:delimited) : nil
詳細は以下参照。 try (Object) - APIdock
Railsのdelimited
Rails では、
number.to_s(:delimited)
とすることで、数値を"3桁区切り"フォーマットの文字列に変換できるらしい。
ActiveSupport::NumericWithFormatによる、to_sの拡張っぽい。
詳細&実例は以下参照。
ActiveSupport::NumericWithFormat
3桁区切り以外にも、
電話番号フォーマットや、通貨フォーマットやら色々あるみたいなので覚えておきたい。