| 次のリビジョン | 前のリビジョン | 
                        
                | 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> |