次のリビジョン
|
前のリビジョン
|
blog:2020:1101_今日のメソッド [2020/11/01 01:06] kijima 作成 |
blog:2020:1101_今日のメソッド [2020/11/01 11:52] (現在) kijima [その2] |
| |
====== 今日のメソッド ====== | ====== 今日のメソッド ====== |
| |
| ===== その1 ===== |
| |
Railsの''Hash#slice!''から。 | Railsの''Hash#slice!''から。 |
| |
例 | <code ruby> |
| def slice!(*keys) |
| omit = slice(*self.keys - keys) # keysは登録ハッシュを出すメソッド。ここでは、[:if, :unless, :on..]などが入っている。*self.keysは引数のこと?引いて…つまりこれらのオプションは無視する、と。 |
| hash = slice(*keys) |
| hash.default = default # defaultも保持する必要がある! |
| hash.default_proc = default_proc if default_proc # procをよくわかっていない。 |
| replace(hash) # ここがメイン。 |
| omit # 画面出力用。副作用にすぎない。 |
| end |
| </code> |
| |
| * sliceの挙動をちょっと変えて、便利にしている。 |
| |
| ''slice!''の例 |
<code ruby> | <code ruby> |
hash = { a: 1, b: 2, c: 3 } | hash = { a: 1, b: 2, c: 3 } |
| |
要するに配列の対応したやつだけ取り出すメソッド。!は破壊的なことをしめす。hash自体が変化している。 | 要するに配列の対応したやつだけ取り出すメソッド。!は破壊的なことをしめす。hash自体が変化している。 |
| ===== その2 ===== |
| ''String#camelize'' |
| |
<code ruby> | <code ruby> |
def slice!(*keys) | def camelize(first_letter = :upper) |
omit = slice(*self.keys - keys) # keysは登録ハッシュを出すメソッド。ここでは、[:if, :unless, :on..]などが入っている。*self.keysは引数のこと?引いて…つまりこれらのオプションは無視する、と。 | case first_letter |
hash = slice(*keys) | when :upper |
hash.default = default # hash.defaultは初期値のようだが、defaultはそもそもnilの模様。 | ActiveSupport::Inflector.camelize(self, true) |
hash.default_proc = default_proc if default_proc # procの意味がわからない。 | when :lower |
replace(hash) # ここがメイン。 | ActiveSupport::Inflector.camelize(self, false) |
omit # 画面出力用。副作用にすぎない。 | else |
| raise ArgumentError, "Invalid option, use either :upper or :lower." |
| end |
end | end |
</code> | </code> |
| |
* sliceの挙動をちょっと変えて、便利にしている。 | 例 |
| <code ruby> |
| "mozilla_firefox".camelize # => MozillaFirefox # upper camel case というらしい。 |
| "mozilla_firefox".camelize(:lower) # => mozillaFirefox # lower camel case というらしい。最初だけ小文字。 |
| </code> |
| |
| * '':upper'' か '':lower'' 以外を入れたとき、ちゃんとエラーメッセージが返ってきて親切。 |
| ===== その3 ===== |
| ''default-proc'' |
| |
| そもそもprocがわかってない。 |
| |
| <code ruby> |
| h = Hash.new { |a| h[a] = a*a } # defaultを定義 |
| p = h.default_proc |
| p.call(2) # => 4 |
| p.call(10) # => 100 |
| h # => {2=>4, 10=>100} |
| </code> |
| |
| <code ruby> |
| h = Hash.new { 3 } # defaultを定義 |
| p = h.default_proc |
| p.call # => 3 |
| </code> |
| ===== 4 ===== |
| ''hash#default'' |
| |
| https://www.includehelp.com/ruby/hash-default_proc-method-with-example.aspx |
| |
| <code ruby> |
| hash = Hash.new(33) # => {} |
| hash # => {} |
| hash[:a] # => 33 |
| hash.default # => 33 |
| </code> |