2007-01-01から1年間の記事一覧
http://www.machu.jp/diary/20071228.html#p01 まちゅさんによる記事。Ruby 1.8.5で動いていたtDiaryを1.9.0で動かす試み。 Rubyの違いに注目するだけではなく、トラブったときの調べ方、目の付け所を参考にするとよさげ。
お試しパッケージということでRuby-1.9.0を一式パッケージ化したMSIを提供します。 L'eclat des jours(2007-12-27) arton先生、ありがとう!
わかりやすいRubyの資料。 http://dev.ariel-networks.com/articles/workshop/ruby/ via id:naoyaのブックマーク
JRubyが遅いという話は過去のものになるかもしれません。 http://recompile.net/2007/10/trunkjruby.html だそうです。わくわく。 追記: なひさんから情報(感謝)。 あらかたJRuby勝ってる。でもRoRで不思議なことが、というエントリが以下。エントリ内で…
[ruby-list:44038]を読んで、String#replaceという破壊的なメソッドを知る。 a = 'hyuki' b = a a.replace 'rubyco' # 破壊的 puts a, b c = 'hyuki' d = c c = 'rubyco' # 非破壊的 puts c, d 実行結果です。 rubyco rubyco rubyco hyukiString#replaceはSt…
artonさんのところで見かけたのを、そのままお借りしています。すみません。JRubyにして動かしています。 # cf. http://arton.no-ip.info/diary/20070807.html#p01 require 'java' def fib(n, r = [0,1]) r[n] ||= fib(n - 2, r) + fib(n - 1, r) end class …
RubyではString#[]=で正規表現を指定すると破壊的な置換ができます。 以下の例では、strが保持しているStringオブジェクトを書き換えてcolorをflowerにしています。 str = 'Do you like this color?' str[/color/] = 'flower' p str #=> "Do you like this f…
7月になったのでStringクラスで遊びましょう(意味なしジョーク)。 オブジェクトoを文字列として扱うときにはto_sメソッドを使いますが、String.new(o)で文字列を作るときには、to_strメソッドを使います。 class Rubyco def initialize(s) @s = s end def …
RubyのString#%メソッドは、レシーバをprintf的書式制御文字列として扱います。 以下の例では、0〜31の数値を10進数、16進数、2進数で表示します。 (0..31).to_a.each do |k| puts "%5d %5X %5b" % [k, k, k] end 実行結果です。 0 0 0 1 1 1 2 2 10 3 3 11 …
String#*を使って、指定した回数繰り返した新しい文字列を作ることができます。 以下のプログラムでは'-'を20個並べた横線を表示します。 puts '-' * 20 実行結果です。 --------------------ちょっと遊びましょうか。 ['-', '=', '+'].each do |a| ['-', '=…
randを使ってある期間(1940〜1980とか)をランダムに返すにはどうしたらいいんだぁあぁあぁあぁあ http://d.hatena.ne.jp/ayabaud/20070704/1183527974 を読んで、別のことを考えました。 指定した期間内から、ランダムで一日を選択する方法。全期間分のDat…
sumimさんの記事経由で灘中学校98年2日目第1問(問題)へ。 1から15まで続けて書くと123456789101112131415となる。これを1つの整数と考えると、この数は21けたで,1が8回使われている。このように、1からある整数まで続…
rubycoの中の人id:hyukiが、Rubyの父Matzさんと対談しました。詳しくはこちらをどうぞ。 日経ソフトウエアで「まつもとゆきひろ×結城浩」の対談
Marshal.dumpでRubyのオブジェクトをファイルに保存し、Marshal.loadで戻すことができます。 1. 以下のプログラムではオブジェクトxをalice.dumpedというファイルにdumpで保存し、すぐ後でloadしてhelloメソッドを呼び出しています。 require 'pathname' cla…
Rubyでは、returnが書かれていないとき最後に実行した文の値が戻り値になります。 def method "hello" if false end p method #=> nil 上で、表示されるのがfalseではなくnilなのは、ifの条件式が成り立っていないときのif文の値はnilだから、と理解しました…
正規表現の選択(|)の優先順位は低いので注意が必要です。 1. 以下のプログラムは、メールの中から「行頭にFrom:またはSubject:を含む行を抽出する」ものですが、期待はずれに終わります。 # 期待はずれ require 'pathname' Pathname.new('girl.mbox').open('…
ルートの無限入れ子クイズ(問題編+解答編)をRubyで実験してみます。 a = Math.sqrt(2) 20.times do |k| p a a = Math.sqrt(2 * a) end 実行結果は以下です。収束しそうな様子が読み取れますね。 1.4142135623731 1.68179283050743 1.83400808640934 1.915…
リスト中に登場する回数の多い要素トップ N を計算するとき、どんな風に書きますか? ランキングの集計 - まめめも via http://d.hatena.ne.jp/sumim/20070619/p2 たとえば、以下のように書きます。 ary = %w(foo bar foo baz foo bar qux foo bar qux quux)…
Rubyでは、メソッド定義の中でもメソッドを定義することができます。 以下のプログラムでは、outerメソッドの定義の中でmethodというメソッドを再定義しています。そのため、outerメソッドの呼び出し前後で、methodの戻り値が変化しています。 def method re…
sumiiさんの『クロージャによる超軽量並行プロセス』を、jijixiさんがRubyに移植したようなので、試してみました。jijixiさんが書いたサンプルを写経して(そのあと、変数名などを自分の理解した範囲で書き換えて)やっと理解しました。 require 'picalc' # Sy…
Array#+では、新しいArrayオブジェクトが作られる。Array#concatではselfに足し込まれる。 以下のプログラムでは、新しいオブジェクトが作られたかどうかをobject_idメソッドで調べています。また、+を行う前に変数cに代入しておいた配列にはbが足し込まれな…
Rubyでは、シングルクォートでくくられた文字列リテラル '...' の中で使える \ のエスケープは、\\ と \' だけです。そのことを確かめようと思いました。 プログラムで \すべての文字 という形の文字列を作り、evalして長さがいくら減るかを調べます。 s = '…
複数の実装方法のどちらが速いかな?とRubyで調べたいときには、Benchmarkモジュールが便利です。 1〜nまでの和を計算する二つの方法を比較してみましょう。以下のプログラムでは、足し算を本当に繰り返して求める方法(method1)と、公式を使って計算で求める…
String#scanを使うと、パターンを指定して必要な文字列を抜き出すことができます。 String#splitを使うと、区切り文字(デリミタ)を指定して必要な文字列を抜き出すことができます。 以下に例を示します。 p '123,45;6789/012'.scan(/\d+/) #=> ["123", "45…
Mailクラスを使うとメールを解析することができます。以下では、mbox形式のファイルストリームからメールを読み出し、差出人に example.com が含まれているものを集計しています。 require 'mailread' MBOX = 'math_girls.mbox' from = Hash.new(0) File.ope…
Rubyで、数字だけの文字列が出てきたとき、Perlの数値コンテキストの気分になっちゃうとエラーになるので注意。 [ "314", "159", "265", "358" ].each do |n| puts n + 1 end #=> in `+': can't convert Fixnum into String (TypeError) Kernel#Integerを使…
整数として処理したければ、オブジェクトがto_iという振る舞いを持っていることを期待してなんでもとにかくto_iしてしまうのがDuck Typingなのかなと思いました。 Duck Typing? - 18 til i die (another phase) なるほど、そうですね。 そういえば、Duck Typ…
http://d.hatena.ne.jp/takahashim/20070610#p1 何だかいいですね。 関係者のみなさまお疲れさまでした。
サンタクロース問題をRubyで書いてみました(via サンタクロース問題を Squeak Smalltalk で)。あちこちまだ変ですが、とりあえず公開。 require 'thread' REINDEER_NUM = 9 ELF_NUM = 10 DISCUSS_NUM = 3 mutex = Mutex.new santa_cv = ConditionVariable.…
http://jp.rubyist.net/RubyKaigi2007/Log0609-S1-04.html