タグ

2013年10月25日のブックマーク (4件)

  • inject (Enumerable) - Rubyリファレンス

    標準クラス・モジュール > Enumerable > inject enum.inject {|memo, item| block } enum.inject(init) {|memo, item| block } injectメソッドは、ブロックを使って繰り返し計算を行うのに使います。ブロックに順に「要素1、要素2」、「ブロックの前回の戻り値、要素3」、「ブロックの前回の戻り値、要素4」、...を渡します。メソッドの戻り値はブロックが最後に返した値になります。 引数initで初期値を指定すると、ブロックに「初期値、要素1」、「ブロックの前回の戻り値、要素2」、「ブロックの前回の戻り値、要素3」、...を渡します。 Ruby 1.8.7 Ruby 1.8.7と1.9では、injectメソッドの別名としてreduceメソッドが加わりました。 次の例は、配列の数値の合計を計算します。また、10

    kjirouu
    kjirouu 2013/10/25
    “injectメソッドにブロックの代わりにシンボルsymでメソッド名を渡すことができます。メソッド名を渡すと、「要素1.メソッド(要素2)」、「前回の結果.メソッド(要素3)」、...を計算していき、最後の結果を返します”
  • Rails 3&4: Arel::Tableを使ってなるべく生のSQLを書かずに済ます方法|TechRacho by BPS株式会社

    Railsでプログラムを書いるとSQLを直接記述する機会が意外と多いので、 なるべくRubyらしく書く方法がないか調べてみました。 ORなどかなり基的な構文でもarel_tableを使う必要があるのですね。 というわけで、Arel::Table を使ってみました。 動作確認環境は以下の通りです。 ruby: 1.9.3-p392 Rails: 3.2.13 arel: 3.0.2 MySQL: 5.1.65 検索条件をORで繋げたい 基的な構文ですがSQLを直接記述する場合が多いのではないでしょうか? User.where("name = ? OR name = ?", "太郎", "花子").to_sql #=> "SELECT `users`.* FROM `users` WHERE (name = '太郎' OR name = '花子')" なるべくRubyで書こうとするとこうな

    Rails 3&4: Arel::Tableを使ってなるべく生のSQLを書かずに済ます方法|TechRacho by BPS株式会社
    kjirouu
    kjirouu 2013/10/25
    詳細不明だがRails4のModel.arel_tableだと引数に2個入らないので、ここの .and で繋げる。また「以上」「以下」は gteq lteq だった。これらはGitHubのREADMEには一切書いてない
  • すごいぞRSpec(letとlet!編) - @yohfee.blog!

    すでに前回のすごいぞRSpec(shared example group編) - ぷろぐらまねがで登場してるけどあらためてletを調べるよ。rspec-core(2.5.1)/features/helper_methods/let.featureを参考に。 let 要するにメモ化するわけで、同一サンプル内だと同じオブジェクトを使いまわせるのだな。違うサンプルでは改めて評価される。さらに遅延評価なので実際に評価されるのは最初にメソッドが呼ばれたときだ。 $count = 0 describe 'let' do let(:count) { $count += 1 } it 'memoizes the value' do count.should == 1 count.should == 1 end it 'is not cached across examples' do count.shou

    すごいぞRSpec(letとlet!編) - @yohfee.blog!
    kjirouu
    kjirouu 2013/10/25
    “letとの違いは評価のタイミング。letが遅延評価なのに対してlet!はbefore each的に各サンプルの実行前に評価される。”
  • kjirou on Twitter: "Time.parse('2013-10-25 00:00:00 UTC') の最後の 'UTC' って、どこの仕様なんだろう"

    kjirouu
    kjirouu 2013/10/25
    UTCをTime.parse内で明示するときは Time.parse('2013-10-25 00:00:00 UTC') と最後に 'UTC' を付ける または .utc で変換