タグ

ブックマーク / shugo.net (4)

  • Rubyで遅延評価 - delay, force, lazy - Journal InTime(2012-04-11)

    _ Rubyで遅延評価 - delay, force, lazy 正格評価の言語で明示的に遅延評価を行う方法として、Schemeのdelay/forceがある。 Rubyで実装するとこんな感じ。 class Promise NULL = Object.new def initialize(&block) @value = NULL @block = block end def self.delay(&block) new(&block) end def force if @value == NULL @value = @block.call else @value end end end count = 0 x = Promise.delay { count += 1; 1 + 2 } p x.force #=> 3 p x.force #=> 3 p count #=> 1 メモ化してく

    aereal
    aereal 2012/04/12
    遅延評価
  • flat_map、非決定性計算、リスト内包表記 - Journal InTime(2011-10-22)

    _ flat_map、非決定性計算、リスト内包表記 Ruby 1.9では、Enumerable#flat_mapというメソッドが追加されている。 %w(ruby perl python).flat_map {|i| i.chars.to_a} #=> ["r", "u", "b", "y", "p", "e", "r", "l", "p", "y", "t", "h", "o", "n"] といった動作をするもので、要はブロックが返す配列を連結した配列を返す。 %w(ruby perl python).map {|i| i.chars.to_a}.flatten(1) とすれば同じことができるのにどうしてわざわざ追加したのか疑問に思われるかもしれないが、 実はflat_mapが追加されたということは、Rubyの配列がHaskellのリストモナドのように使えることを意味している。 以前の日記

    aereal
    aereal 2011/10/24
  • RubyKaigi2011発表資料, RubyKaigi2011 3日目, スコープ付き定数参照 - Journal InTime(2011-07-18)

    _ RubyKaigi2011発表資料 以下の場所に置いてあります。 <URL:http://shugo.net/tmp/RubyKaigi2011.pdf> Tags: Ruby _ RubyKaigi2011 3日目 最後のRubyKaigiの最終日。これまでずっと小ホールのテクニカルなセッションを中心に見てきたのだけど、parse.yの話を聞きたいところをぐっと堪えて、日Rubyの会のセッションとAll About RubyKaigi Ecosystemを聞いた。やはりこの二つは聞かないと。 他のセッションの中では、柴田さんのセッションの「機能の追加は慎重に削除は大胆に」という話が印象に残った。咳さんの「カスタマイズは誘惑する」話の続きだけど、erubyに限らず色々前科があるだけに耳が痛い(今日はdisられないだろうと思ったんだけどなあ)。 まつもとさんの基調講演は、最後のRuby

    aereal
    aereal 2011/07/19
    構文糖というか演算子にしてしまってもよい気がする
  • Rubyコーディング規約

    はじめに 文書は、Rubyによりコーディングを行う際の規約について述べる。 実際のプロジェクトに適用する際には、このコーディング規約をカスタ マイズして用いることを推奨する。 ソースコードの整形 インデント プログラムを読みやすくするため、インデントを適宜行う。インデント 幅は2とする。また、インデントにはスペースのみを使用し、タブは使用 しない。(環境によりタブ幅が異なるため。) 例: if x > 0 if y > 0 puts "x > 0 && y > 0" end end 一行の桁数 一行の桁数は最大80桁までとする。 空行 複数のクラスの区切には空行を挿入する。 例: class Foo ... end class Bar ... end 誤った例: class Foo ... end class Bar ... end また、クラス内の各構成要素の区切にも空行を挿入する。

  • 1