maeshimaの日記

メモ書きです

ruby

__method__

実行しているメソッド名を返すメソッド。aliasしたメソッドの場合は元メソッドの名前を返す。 def foo __method__ end alias bar foo foo # => :foo bar # => :foo

末尾再帰最適化

名前だけ知ってて、実際どういうものか知らなかったけど、下記エントリを読んで大体理解できたと思う。再帰は再帰なんかじゃない!末尾再帰こそが真の再帰なんだ! - hp12c Rubyの末尾再帰最適化を理解する - hp12c 末尾再帰とは 再帰的に実行するメソッドの…

Arrayその5

Array#transpose 二次元配列に対して使うメソッド。行と列を転置する。 a = [[1,2],[3,4],[5,6]] a.transpose # => [[1, 3, 5], [2, 4, 6]] 似たようなものに Enumerable#zip がある。これは配列の引数とって足してから行と列を転置するメソッド。 b = [1,2]…

Arrayその4

こうやって調べてみると知らないことやあやふやな理解だったところがたくさんあるなー Array#product 配列の要素と引数の要素の組み合わせを作り、配列の配列を作って返す。本よりも下記のページの方がわかりやすい。 product (Array) - Rubyリファレンス Ar…

Array その3

Array#count 引数を渡さなかった場合は要素の個数を返す。引数を渡した場合は、引数と等しい要素の個数を返す [1,2,2,3,3,3].count(2) #=> 2 またはブロックを評価した結果が真になる要素の個数を返す。 [1,2,2,3,3,3].count do |obj| obj > 2; end #=> 3 ど…

rvm.el

M-x rvm-use で、emacsで使うrubyのバージョンとgemsetを切り替えられる。デフォルトのgemsetは"global"で、空白にするとうまく切り替わらない。

xmpfilterをemacsで使う

gem install rcodetools でrcodetoolsいれる。gemに入ってるrcodetools.elをemacsのload-path上に配置。 (require 'rcodetools) とすると M-x xmp が使えるようになり、下記のようにRubyのコード上で実行すると # => としたところに実行結果が挿入されるよう…

Arrayのメソッドその2

Array.try_convert 1.9から。引数のオブジェクトをto_aryメソッドを使って配列に変換しようとする。変更できない場合は nil を返す。 Array#* 整数なら配列を整数個連結して返す String(またはto_strを持つメソッド)ならjoin(str)と等価 重複削除系 とか & …

Array.new

第一引数に要素の数を指定できる。第二引数にオブジェクトを指定すると、そのオブジェクトが第一引数の数格納された配列を返す。この場合、配列の全部の要素が同じオブジェクトを指すので、別々にしたい場合はブロックを使う。 a = Array.new(2, {}) #=> [{}…

drubyメモその二

drubyメモ - maeshimaの日記を見返して気になったところのメモ。三ヶ月も経つとずいぶん忘れてる>< DRbサーバ〜クライアント間で、引数を参照渡しってどうやってるんだろう? 深くは追いかけてないけど、本当の意味での「参照渡し」は別プロセス間では出来…

ruby-electricとyasnippetは相性悪い?

emacs23.2でruby-electrricを有効にすると、yasnippetのruby-mode用の定義が使えないみたい。

rvm package install

rvm用のディレクトリ($rvm_path/usr)にインストールするコマンド rvm package install openssl rvm package install readline # ...

twitter_oauthを使ってみる

The Ruby Toolbox Searchでtwitterで検索すると2位のtwitter_oauthのREADMEを見ながらtwitter で oauth 認証をしてみた。ダントツ1位の twitter gem もあったけどなんとなく。moomerman's twitter_oauth at master - GitHub unauthorized request example …

god

Ruby製のプロセス監視ツールGodについてのメモ。God - A Process Monitoring Framework in Rubyの内容を途中まで適当に意訳してるだけ。 インストール sudo gem install god 実行方法 # 普通に実行 sudo god -c /path/to/config.god # foreground で実行 sud…

drubyメモ

druby使う時のメモ。 drubyのサーバプロセスはスレッドなのでmutex的な処理が必要になってくる drubyの引数/戻り値はMarshall.dumpされたオブジェクト。値渡し。 相手の知らないクラスのインスタンスは送れない(厳密には送れるけどDRbUnknownとかいうオブジ…

ruby-openidはテスト時にfile格納で基本はmemcache

久しぶりにopenid_authenticationを使ったらDB store が無くなっていた。今はopen idの情報を一時的に格納しておくための方法が三パターンある。 file memory memcache memoryがデフォルトだけれど、単にhashに格納しているだけなのでマルチプロセスなサーバ…

Module.ancestors

こんな感じで継承関係を表示してくれて便利 ree-1.8.7-2010.02 > Array.ancestors => [Array, Enumerable, Object, Kernel]

Hash#inspect

key/valueの順番ってどうなるのかなーと思って調べました。どういうロジックで順番決めてるのかはよくわからないですが、基本的に中身が同じなら同じ出力になるみたいですね。ちなみに別プロセスでも同じ結果でした。 ree-1.8.7-2010.01 > {:b => "fuga", :a…

Builderで文字列をエスケープさせない方法

builderはデフォルトでhtmlエスケープ的なことをしてくれますが、エスケープしたくないときもあります。 xml = Builder::XmlMarkup.new :indent => 2 xml.root "<hoge></hoge>" xml.target! # => "<root>&lt;hoge&gt;&lt;/hoge&gt;</root>" そういうときは xml = Builder::XmlMarkup.ne…

rake

rakeファイルの書き方を必要そうなとこだけざっくり調べた。 タスク 引数の書式は下記の二通り 処理したいタスクの名前のString 処理したいタスク => 依存するタスクのハッシュ ブロック中の処理が実行される "default"のみ予約語。実行タスクが指定されない…

ファイルの最終アクセス時刻と更新時間を変更する

File.utime(atime, mtime[, filename[, ...]]) ファイルの最終アクセス時刻と更新時間を変更する

演算子以外の"&"の使い方

復習復習! メソッド宣言時 & メソッド宣言の中で、最後のメソッド引数の名前の前に付けて、メソッドに渡されたブロックをその引数に代入できるようにする。 メソッド呼び出し時 メソッド呼び出しの中で、メソッドにまるでブロックのようにprocを渡すときに…

演算子以外の"*"の使い方

Ruby使いにはあたりまえすぎる話だけど念のため復習しとく。 メソッド宣言時の可変長引数リスト 引数をまとめて配列に格納する。 def hoge(*args) args end hoge(1,2,3) #=> [1,2,3] 配列やEnumerableオブジェクトの展開 代入やメソッド呼び出しの中の配列に…

pathname

RubyPulse :: RubyPulse Episode 0.40 - pathname - Pathname represents a pathname which locates a file in a filesystem. - RubyDocをみて。pathnameはpathnameを簡単に扱える標準ライブラリ。 require File.join(File.dirname(__FILE__), 'boot') みた…

Classクラスの===

Classクラスの === は、右辺が左辺に指定するクラスのインスタンスになっているかどうかをテストする。なので同じクラス同士を===で比較してもfalseになる class A; end A === A #=> false

ネスト元のクラス or モジュールが定義されていないとエラー

下記の例だとHogeやHoge::Fugaを定義してやる必要があるみたい。 # -*- coding: utf-8 -*- class Hoge::Fuga::Foo def self.hoge puts "hoge" end end Hoge::Fuga::Foo.hoge #=> uninitialized constant Hoge (NameError) これならおk # -*- coding: utf-8 …

"字句的に"囲っていることが定数探索の条件

Hoge::Fuga::Fooで定数Aを探すときに、Hoge::Fuga::Foo, Hoge::Fuga, Hogeの順で探すのかと思ってたけどそうではないみたいね # -*- coding: utf-8 -*- class Fuga def self.hoge puts "hoge" end end module Hoge module Fuga def self.hoge puts "fuga" en…

Nokogiri::Node

http://nokogiri.org/Nokogiri/XML/Node.html気になったメソッドをメモ add_child(node_or_tags) NodeにNodeを挿入できる。同じような感じのメソッドに add_next_sibling(node_or_tags) add_previous_sibling(node_or_tags) after before 等がある remove() …

Regexp.escape

正規表現中で特別な意味を持つ文字の前にバックスラッシュを挿入する。正規表現中で変数展開するようなときにとても使える

正規表現メモ

"hoge".scan(/(.+)hoge(.+)|(.+)/) の三つ目の括弧は$1なのかなと思ったら$3だった。