Ruby

join

ref:http://d.hatena.ne.jp/kwatch/20090716/1247717055 知ってて書いているかどうかよくわかりませんが、Python には実際、string.join がありますね。 import string print string.join(['1', '20'], ' ') # 1 20 ところで、separator が optional っての…

bool

ref:http://d.hatena.ne.jp/asipruby/20090515 そもそも、true か false かを調べたい要望ってあるのか? あと、kind_of? よか、equal? でよくね、と思った。性能的にも(以下略)

Rubyの配列

こりゃ意外。この配列の new が終わるのに2.5秒ぐらいかかるので、参照にかかるコストはそう変わらないことになる。つまり、単方向連結リストではなく、本当に配列だったと……。ということは、なんか操作する時は、いちいち malloc して copy するのか? んな…

find

ref:http://d.hatena.ne.jp/PyTest/20080408/1207655137 なんかこう、ひとこと書きたくなるという点で PyTest さんは良いな。 まぁ、Ruby ならもっと簡単。shiro さんのコメントの通りというか PyTest さんも思っているようだが、言語云々よりライブラリの話…

Ruby/Pythonのyield

ひとことでいってしまうと、Rubyのは内部イテレータでPythonのは外部イテレータ。

Enumerator

ref:2008-01-11 - プログラミング日記 trunk ではちゃんと動きます。 % ruby1.9 -v ruby 1.9.0 (2008-01-11 revision 0) [i686-linux] % irb1.9 irb(main):001:0> (1..4).each.with_index.to_a => [[1, 0], [2, 1], [3, 2], [4, 3]] irb(main):002:0> e = (1…

ruby-1.9.1

なんか、本当に 12/25 に出すらしいけど、まぁ ruby-dev の流れを見る限り、stable release といえるようなもんではなさそうだよな。milestone? なにがすごいって、リリース用ブランチを切るでもなく普通に trunk で作業だし*1、今日時点でもテストが1つ fai…

compile/disassemble

なんとなくコードの compile と disassemble についてメモ。 Python では compile と dis module を使えば良い。 >>> code = compile("print 1+2", "<string>", "exec") >>> eval(code) 3 >>> import dis >>> dis.dis(code) 1 0 LOAD_CONST 3 (3) 3 PRINT_ITEM 4 PRI</string>…

Ruby 1.9 で eval が遅いという話

ref: Re: Ruby1.9で遅くなる項目 - usagidropの日記 ささださんがいうように、素直にベンチマークのコードを見てみればいいと思うのだけど。まぁ、ベンチマークコードの所在が分からないというオチもありそうだけどな。 ベンチマークのコードは Ruby のレポ…

ローカル変数とメソッドと eval

def x :method end def f if false x = :var end x end p f # => nil f が nil を返すのは何ともかんとも。Python User としてはちょっと気持ち悪いかも知れない。まぁ、ruby はメソッドかローカル変数かをレキシカルな情報を使って判定しているんだろうけど…

Ruby Filter

ref:Life is beautiful: オブジェクトを次々に渡す「Ruby Filter」ってどうだろう どうせやるなら、Ruby の中でもパイプラインを構築できるようにすればいいのに。 require 'pp' require 'uri' require 'open-uri' require 'rubygems' require 'scrapi' clas…

いちいち拡張しなくても

ref:Life is beautiful: 教えながら学ぶRuby: 言語を拡張したくなる衝動に関して nil に対する each で「何もしない」のが論理的に正しいっつうのは正直よくわからん。Duck typing としても筋が悪いような気がする。 てか、こんなの適当にヘルパメソッド追加…

アクセッサ

ref:L'eclat des jours(2007-09-01) もうずいぶん昔読んだ本に、クラス内部でもアクセッサを使えということは書かれていた気がする。なんだっけ、GoF 本か、(More) Effective C++ か、Effective Java かたぶんその辺。 そういや、setter を使うときは self …

ランダムな文字列生成

ref:http://subtech.g.hatena.ne.jp/secondlife/20070821/1187667574 ref:http://subtech.g.hatena.ne.jp/secondlife/20070820/1187578797 ref:http://d.hatena.ne.jp/knagano/20070820/1187621230 ref:http://d.hatena.ne.jp/knagano/20070821/1187656060 …

increment

ref:++がない無いということ - L'eclat des jours(2007-07-21) まぁ、必要ないですよね。 ところで、本質的な話ではないからかだれもツッコミいれてないですけど、C/C++ においては a += 1 と a++ は式の評価値が違いますよね。 あと今日気づいたんだけど C+…

h-index #3

Haskell は分からない、という、はてブ指数を言い出した人がブックマークでコメントしていたので、同等の処理を Ruby と Python で。 余計なことにユニットテスト付き。 module Enumerable def take_while ret = [] each do |val| break unless yield val re…

最近の ruby-dev

なんか、最近 ruby-dev にひたすらバグレポートを投げ続ける遠藤さんと田中さんがすごい。なんなんだろ。テストチーム?

ランキング

ref:まめめも - ランキングの集計 とりあえず、N 位に同数のものがあるケースを無視するとだ、Hash#to_a と sort_by でチェーンするのが自然なんでは。 ary = %w(foo bar foo baz foo bar qux foo bnar qux quux) n = 3 counts = Hash.new { 0 } ary.each do…

バージョンと速度

Debian では自前でビルドした Ruby 1.8.6-p36 をインストールして使っているんだけども、fib だと Debian パッケージの Ruby 1.8.5 とえらく速度が違うことに気づいた。 % /usr/bin/ruby -v ruby 1.8.5 (2006-08-25) [x86_64-linux] % /usr/local/bin/ruby -…

JRuby vs CRuby #2

Someone said, try running it a few more times in the script, so Java’s JIT can optimize it.Yes, that is well known fact. I tried another test according to this proposal. def fib(n) if n == 0 then 0 elsif n == 1 then 1 else fib(n-1) + fib(n…

each で隣の要素を参照 #4

id:odz さんの対策だと $index がマルチスレッドで変なことになるような気がする。自分流の修正版。 うはは。おっしゃるとおり。自分でマルチスレッドがどうとか書いている癖にすっかり忘れているよ。あほだ。 で、id:ku-ma-me さんの新しいのはネストの内側…

each で隣の要素を参照 #3

自分のことは棚に上げておいて人のコードにツッコミ。 ref:まめめも - each_with_prevsucc via:はじめてのにき(/-')(2007-06-14) おぉ、そうか ThreadLocal がなければ Thread.current をキーにすればいいだけなのか。うまい。常識? それはさておき、 [1].e…

each で隣の要素を参照 #2

2007年06月13日 s99937 s99937 ruby わりかしeach_with_index派。かっこよくはないけど。ちなみに e_w_iはArrayではなくEnumerableにあります。 あ、いや、そりゃ誤解。Array ならランダムアクセス可能だから each_with_index でインデックスがあれば、前後…

JRuby vs CRuby

ref:JRuby 1.0ベンチマーク(fib(30).rb) - 航海日誌 (2007-06-12) ref:フィボナッチ数ベンチマーク - val it : α → α = fun ref:しつこく JRuby - val it : α → α = fun Debian etch, Athlon 64 X2 4400+ で試してみた。 % ruby -v ruby 1.8.6 (2007-06-07 p…

each で隣の要素を参照

ref:はじめてのにき(/-')(2007-06-13) ref:eachで回してるときの次の要素がほしい - Greenbear Diary (2007-06-12) おぉ?こういうのは Enumerable モジュールに適当にメソッド追加とかでどうにでもなりそうな気がする。 module Enumerable def each_with_ne…

Ruby VM と JVM

ref:ASIPの徒然なるままに: 何故、今、Rubyに注目するのか? あとで書く、と思う。たぶん。

Ruby で FizzBuzz

だからしつこいって。 class Integer def is_multiple_of?(*ns) ns.all? {|n| self % n == 0} end end (1..100).each do |i| if i.is_multiple_of? 3, 5 puts 'FizzBuzz' elsif i.is_multiple_of? 3 puts 'Fizz' elsif i.is_multiple_of? 5 puts 'Buzz' else…

簡易HTTPサーバ

ref:naoyaグループ - naoyaの日記 - 指定したパスをルートにして公開する httpd とりあえず実体参照変換はいれたほうがいいんじゃないかとか。 --- httpd.pl.orig 2007-05-14 00:46:06.000000000 +0900 +++ httpd.pl 2007-05-14 00:53:34.000000000 +0900 @@…

RSpec

RSpec on Rails とか試してみたりしているんだけど、なんであれは assertion のメソッドが should なんだろう。 must じゃね?とか思うのは自分だけなんだろうか。

微妙に違う

ruby-dev でまつもとさんが で、Ruby 1.9ではISO8601形式(ただし区切りのTは使わない)にしようと思っています。 なんていっているんだけど、仕様に準拠していないのに ISO 8601 形式とか呼ぶのは勘弁して欲しいなぁ。