2014年7月17日のブックマーク (12件)

  • Ruby 2.0 メモ: Lazy と LINQ とループ融合

    2012-06-15 (鈴) 1. はじめに 2. Ruby 2.0 開発版のインストール 3. Enumerator::Lazy 4. ループ融合としての解釈 5. C# の LINQ との比較 6. おわりに 1. はじめに 稿では Ruby 2.0 に予定されている Enumerator::Lazy について,先行する概念と対照して考察する。 それが計算量の観点からループ融合の最適化に等しいことを非形式的に論ずる。 また,C# の LINQ と実質的に同じものであることを示す。 以上の議論から Enumerator::Lazy が来るべき Ruby 2.0 の最も重要な機能の一つであることを示す。 2. Ruby 2.0 開発版のインストール 執筆時現在,Ruby 2.0 の処理系は https://github.com/ruby/ruby から $ git clone https

    crist18
    crist18 2014/07/17
    “Enumerator::Lazy は決して新規の概念ではない。 遅延評価の典型的な応用例として遅延リスト (残りの要素を約束として持つリスト) が従来から有名である”
  • Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)

    『るびま』は、Ruby に関する技術記事はもちろんのこと、Rubyist へのインタビューやエッセイ、その他をお届けするウェブ雑誌です。 Rubyist Magazine について 『Rubyist Magazine』、略して『るびま』は、Rubyist の Rubyist による、Rubyist とそうでない人のためのウェブ雑誌です。 最新号 Rubyist Magazine 0063 号 バックナンバー Rubyist Magazine 0063 号 Rubyist Magazine 0062 号 Kaigi on Rails 特集号 RubyKaigi Takeout 2020 特集号 Rubyist Magazine 0061 号 Rubyist Magazine 0060 号 RubyKaigi 2019 直前特集号 Rubyist Magazine 0059 号 Rubyist

    crist18
    crist18 2014/07/17
    “Enumerator::Lazy ”
  • Rubyのattr_accessor, attr_reader, attr_writerとは何か -- ぺけみさお

    Ruby初心者であれば構文の一種だと誤解してしまいそうだが、これらはインスタンス変数にアクセスするためのメソッドを定義するメソッドである。 Java等の他の言語を経験した人には、プライベート変数に対するセッタやゲッタを勝手に定義してくれるメソッド、と説明すればわかりやすいかも知れない。 これらのメソッドの役割分担は以下のとおり。 通常はattr_accessorを目にする機会が多いと思われる。 attr_accessor – セッタとゲッタを共に定義する attr_reader – ゲッタのみを定義する attr_writer – セッタのみを定義する以下の2つのRubyスクリプトは、どちらも質的に同じ意味である。 しかし、attr_accessorを使うことで、記述量を大幅に減らせていることがわかる。 Rubyでは単なるセッタやゲッタを自分でゴリゴリと定義する代わりに、attr_*を使

    crist18
    crist18 2014/07/17
    “attr_accessor :foo”
  • まつもと直伝 プログラミングのオキテ 第6回 メタプログラミング:ITpro

    今回は「プログラミングをプログラムする」メタプログラミングについて学びます。メタプログラミングを利用すると,動的にメソッドを追加するなど,実際のアプリケーション作成に役立つ処理が簡単に実現できます。メタプログラミングと小言語の関係についても解説を加えました。 今回はメタプログラミングを扱います。メタとはギリシャ語で「間に,後に,越える」などを意味する接頭辞「meta」に由来する言葉で,「超越」,「高階」などの意味があります。例えば,Rubyをはじめとする多くのオブジェクト指向プログラミング言語では,「クラスのクラス」のことを「メタクラス」と呼びますし,他のオブジェクトを支えるクラス・オブジェクトなどのことをメタオブジェクトと呼ぶこともあります。 メタプログラミングとは,プログラミングをプログラミングすることです。そんなことが何の役に立つのかと感じる方もいらっしゃるでしょう。今回は一見して何

    まつもと直伝 プログラミングのオキテ 第6回 メタプログラミング:ITpro
    crist18
    crist18 2014/07/17
    “(1)引数のシンボルすべてに対して以下の処理を繰り返す。 (2)シンボルで指定された名前のメソッドを定義する。そのメソッドはシンボルの名前の先頭に「@」を付加したインスタンス変数の値を取り出す。 ..
  • Module#attr_reader (Ruby 3.3 リファレンスマニュアル)

    attr_reader(*name) -> [Symbol][permalink][rdoc][edit] インスタンス変数 name の読み取りメソッドを定義します。 例 class User attr_reader :name # => [:name] # 複数の名前を渡すこともできる attr_reader :id, :age # => [:id, :age] end このメソッドで定義されるメソッドの定義は以下の通りです。 例 def name @name end [PARAM] name: String または Symbol を 1 つ以上指定します。 [RETURN] 定義されたメソッド名を Symbol の配列で返します。

    crist18
    crist18 2014/07/17
    “attr_readerメソッドは、クラスやモジュールにインスタンス変数を読み出すためのアクセサメソッドを定義します。”
  • インスタンスメソッド内での @ と self の違い - Qiita

    @hoge は、インスタンス変数 @hoge を参照します。 self.hoge は、インスタンスメソッド hoge を呼び出します。 self.hoge = は、インスタンスメソッド hoge= を呼び出します。 attr_accessor で hogeとhoge=を定義しておけば、self.hogeとself.hoge=を呼び出せます。 class Clazz attr_accessor :hoge def initialize(arg) @hoge = arg end def func puts self.hoge end end obj = Clazz.new 'instance var.' obj.func #-> instance var.

    インスタンスメソッド内での @ と self の違い - Qiita
    crist18
    crist18 2014/07/17
    “attr_accessor で hogeとhoge=を定義しておけば、self.hogeとself.hoge=を呼び出せます。”
  • スマホRPGの新次元『白猫プロジェクト』が配信開始! - Boom App Games

    これがスマホRPGなのかと見まごうほどの美麗な3Dグラフィックもさることながら、タッチパネルで快適操作を実現するために採用された次世代インターフェイス「ぷにコン」が素晴らしい!一言でいうと、画面のどこでも操作でき、画面のどこでもタッチボタンになってしまうというインターフェイス。思えば「バーチャルパッド」という『ゲーム&ウォッチ』以来からの伝統である「十字キー+ボタン」の物理キーを代替する3Dゲーム操作は、スマホゲー操作の最適解ではなかったのかもしれません。スマホでアクションゲームをプレイするとなった時に感じる操作の違和感がこの「ぷにコン」操作時にはありませんでした!これはすごい。なにより「縦持ちでプレイする3Dゲーム」という自然さがスマホゲープレイヤーにはうれしいかもしれません。

    スマホRPGの新次元『白猫プロジェクト』が配信開始! - Boom App Games
    crist18
    crist18 2014/07/17
    白猫まとめ。
  • ruby::メソッド - Ambitious but Rubbish

    Ambitious but Rubbish 学んだことをなぐり書き トップページページ一覧メンバー編集 ruby::メソッド 最終更新: alphaneet 2011年08月18日(木) 00:50:54履歴 *(アスタリスク)引数 メソッドの中にメソッドを定義した場合の挙動 動的ディスパッチ 動的メソッド ゴーストメソッド アラウンドエイリアス *(アスタリスク)引数 def m1 puts 'call m1' end m1 #引数が0個以外だとエラーになる #m1(0) #m1(:a, :b) #引数を無視したい場合は * を付ける #普通は余り使わないが稀に method_missing などで使用したりするっぽい。 def m2(*) puts 'call m2' end m2 m2(0) m2(:a, :b) call m1 call m2 call m2 call m2 メソッ

    ruby::メソッド - Ambitious but Rubbish
    crist18
    crist18 2014/07/17
    “#引数を無視したい場合は * を付ける#普通は余り使わないが稀に method_missing などで使用したりするっぽい。”
  • Module#alias_method (Ruby 3.3 リファレンスマニュアル)

    alias_method(new, original) -> Symbol[permalink][rdoc][edit] メソッドの別名を定義します。 例 module Kernel alias_method :hoge, :puts # => :hoge alias_method "foo", :puts # => :foo end alias との違いは以下の通りです。 メソッド名は String または Symbol で指定します グローバル変数の別名をつけることはできません また、クラスメソッドに対して使用することはできません。 [PARAM] new: 新しいメソッド名。String または Symbol で指定します。 [PARAM] original: 元のメソッド名。String または Symbol で指定します。 [RETURN] 作成したエイリアスのメソッド名を表す

    crist18
    crist18 2014/07/17
    “alias_method(new_name, original_name)”
  • Ruby 2.0.0リリース! - キーワード引数を使ってみよう|TechRacho by BPS株式会社

    Ruby2.0の重要機能の一つ、キーワード引数を使ってみましょう。 基的なキーワード引数の使い方 最も基的な使い方は、以下のようなものです。 def test1(name: 'unknown', age: 0) puts "name=#{name}, age=#{age}" end > test1() name=unknown, age=0 > test1(name: 'yamada', age: 20) name=yamada, age=20 可変長引数とデフォルト引数とキーワード引数を組み合わせる 通常の引数やデフォルト引数、可変長引数と組み合わせてみましょう。「通常の引数→デフォルト引数→可変長引数(*)→キーワード引数」の順にする必要があります。 def test2(id, type='normal', *friends, name: 'unknown', age: 0) pu

    Ruby 2.0.0リリース! - キーワード引数を使ってみよう|TechRacho by BPS株式会社
    crist18
    crist18 2014/07/17
    “通常の引数→デフォルト引数→可変長引数(*)→キーワード引数”
  • Ruby の名前空間を絶対パスで指定 | Hazi.tech

    Module名や、Class名かかぶってしまい、トップレベルのClassを呼び出したいのにそのメソッドの属する名前空間のClassが呼び出されてしまう場合は絶対パスで名前空間を指定すればいい。 通常 Foo::Hoge::Fuga という形で名前空間を指定するが、これは一番身近な名前空間を探すようになっているため、トップレベルの Foo と同名の名前空間が、呼び出し元の名前空間に存在してしまう場合は、を明示的にトップレベルを指定する必要がある。という話。 どう指定するかというと ::Foo とすればいい。 もともと::この2つのコロンはディレクトリの仕切りを表す記号として使われてきた歴史がある。 なので、考え方としては :: から始まれば絶対パス。ということになる。 コードで書くとこんな感じ class Foo; end module Bar class Foo; end class C

    crist18
    crist18 2014/07/17
    “考え方としては :: から始まれば絶対パス。ということになる。”
  • ActiveModel::Dirtyのメソッドを使って変更を感知しよう - Qiita

    ActiveRecordを使っていると時々プログラム内でModelオブジェクトの値を変更してから、変更前の値が欲しくなったりすることがある。 そんなときはActiveModel::Dirtyのメソッドを使うとModelのオブジェクトに変更があった時に変更の情報を取得出来る。 # たとえばUserのレコードを一個引っ張ってきて u = User.last => #<User id: 5, age: 19, name: "Kiriko Takemura"> # 変更されていないことが確認出来る u.changes => {} u.changed => [] u.changed? => false # 名前を変更してみる u.name = "Caroline Charonplop Kyary Pamyu Pamyu" # するとchangesが変更されたプロパティの変更前と変更後のデータが取得で

    ActiveModel::Dirtyのメソッドを使って変更を感知しよう - Qiita
    crist18
    crist18 2014/07/17
    “ActiveModel::Dirtyのメソッドを使うとModelのオブジェクトに変更があった時に変更の情報を取得出来る”