タグ

ブックマーク / blog.tmtms.net (5)

  • Ruby 2.7 の変更点 - 「...」で全引数渡し - tmtms のメモ

    Ruby 2.7 アドベントカレンダーの9日目の記事です。 qiita.com 「...」で全引数渡し メソッド内から別のメソッドを呼び出す際に、... で今のメソッドに渡された引数そのまま渡すことができるようになりました。 ブロックも含めてすべて渡されます。 def hoge(...) fuga(...) end def fuga(a, b=0, key: 123, &block) p [a, b, key, block] end hoge(1) #=> [1, 0, 123, nil] hoge(1, 2, key: 789) #=> [1, 2, 789, nil] hoge(1) { nil } #=> [1, 0, 123, #<Proc:0x0000559166565430 test.rb:11>] 括弧なしの super みたいな感じですね。 なお、... はそのままでは R

    Ruby 2.7 の変更点 - 「...」で全引数渡し - tmtms のメモ
    el-condor
    el-condor 2019/12/09
    地味に便利
  • Ruby 2.7 の変更点 - パターンマッチング - tmtms のメモ

    Ruby 2.7 アドベントカレンダーの2日目の記事です。(更新が遅いのは仕様です) qiita.com パターンマッチング パターンマッチングは Ruby 2.7 での目玉機能と言ってもいいでしょう。 ただし現時点では experimental で、使用すると次のメッセージが出力されます。 warning: Pattern matching is experimental, and the behavior may change in future versions of Ruby! パターンマッチングは配列やHashなどの構造のパターンとオブジェクトをマッチングするためのものです。 パターンマッチングは case...in 構文を使用します。 case に指定したオブジェクトのパターンが、in で指定したパターンと一致していれば、パターンに指定した変数に対応する値が代入されて、in 部

    Ruby 2.7 の変更点 - パターンマッチング - tmtms のメモ
    el-condor
    el-condor 2019/12/04
    ElixirとRustで使ってた勢としては、パターンマッチングは「使って便利」→「突然代入されてることに気づきもにょる」→「慣れる」のステップだったので、そういうものなのだと思います。
  • Ruby 2.6 の変更点 - Array - tmtms のメモ

    Ruby2.6アドベントカレンダーの3日目の記事です。 qiita.com Array Array#union 追加 Array#difference 追加 Array#filter, Array#filter! 追加 Array#to_h にブロックを渡すとキーと値を変換できる Array Array#union 追加 https://bugs.ruby-lang.org/issues/14097 引数に指定した配列を結合した新しい配列オブジェクトを返します。重複した要素は削除されます。 ary1 = [1, 2, 3] ary2 = ary1.union([2, 3, 4, 5]) ary1 #=> [1, 2, 3] ary2 #=> [1, 2, 3, 4, 5] 複数の配列を指定できること以外は Array#| と同じ。 Array#difference 追加 https://b

    Ruby 2.6 の変更点 - Array - tmtms のメモ
    el-condor
    el-condor 2018/12/05
    Array#to_hのブロックはかなりお役立ちなのでは
  • MySQLのsjisとcp932の違い - tmtms のメモ

    今さらですけど、自分でもちゃんと把握してなかったので調べてみました。 MySQLのCharsetのうちシフトJIS系のものはsjisとcp932の二つあります。 どちらもコードの範囲は次のように同じです。 1バイト文字 0x00-0x7F, 0xA1-0xDF 2バイト文字の1バイト目 0x81-0x9F, 0xE0-0xFC 2バイト文字の2バイト目 0x40-0x7E, 0x80-0xFC 違いは文字集合です。1バイト文字はどちらも同じ(ASCII + JIS X 0201 カナ)ですが、2バイト文字はsjisはJIS X 0208 で、cp932はWindows-31Jです。 sjisに含まれていない文字 cp932はsjisよりも文字が多く、丸囲み数字(「①」「②」「③」等)、ローマ数字(「Ⅰ」「Ⅱ」「Ⅲ」等)、組文字(「㍉」「㌍」「㍻」等)、その他「彅」「髙」等の JIS X 0

    MySQLのsjisとcp932の違い - tmtms のメモ
  • クラスはクラスクラスのインスタンスである - tmtms のメモ

    タイトルで出落ち感がありますが…。 naruby で時間があまった時のために用意してあったのですが、時間が余らなかったので発表しなかった小ネタです。ここで公開して供養します。 Rubyはほぼすべてがオブジェクトです。 クラスもオブジェクトです。オブジェクトということはクラスがあります。オブジェクトのクラスはオブジェクトの class メソッドで調べられます。 class Hoge end Hoge.class #=> Class Hoge クラスのクラスは Class であることがわかりました。 つまり「クラスはClassクラスのインスタンス」ということです。 クラスがClassクラスのインスタンスということは、Class.new すればクラスが作成されるわけです。 a = Class.new #=> #<Class:0x00560d27bf2108> Hoge = a #=> Hoge

    クラスはクラスクラスのインスタンスである - tmtms のメモ
    el-condor
    el-condor 2017/12/04
    これが理解できるとメタプログラミングの理解が一気に進むやつ/railsでlibからapp/以下を参照するコードを誤って書くとよく起きるやつの原因や…>hoge.class.name==‘Hoge’かつhoge.class!=Hogeの事象
  • 1