2006-02-01から1ヶ月間の記事一覧

Test::Unit::TestCase(2)

修正後。 require "test/unit" class RubycoTest < Test::Unit::TestCase def test_rubyco testval = "Expected" assert_equal "Expected", testval, "Simple string test." end def test_rubycoadd z = 3 + 4 assert_equal 7, z, "Simple '+' test." end en…

$SAFE

Rubyでは汚染された変数を使ったオペレーションに制限を持たせることができます。 $SAFE = 1 File.unlink ARGV[0] #=> in `unlink': Insecure operation - unlink (SecurityError)

String#split

RubyのString#splitを使うと、デリミタを使って文字列から配列が作れます。文字列と正規表現のどちらもデリミタにできます。 s = "Alice, Bobby, Chris,Diana, " p s.split(",") #=> ["Alice", " Bobby", " Chris", "Diana", " "] p s.split(/,\s*/) #=> ["A…

ReFe

「ReFeなら表示されますよ」というアドバイスを以前いただいたので、ReFe(りふぇ)なるものをインストールしました。 ReFeからダウンロードして展開。 README.jaを読む。 ruby setup.rb config ruby setup.rb setup ruby setup.rb install refe-0.8.0\data\…

String#succ

Rubyにも、Perl同様にマジカルインクリメントがありました。 puts "123456789".succ #=> 123456790 puts "XYZ".succ #=> XZA puts "<789>".succ #=> <790>

Array#flatten

RubyのArray#flattenは配列を「平ら」にします。再帰的構造はどうなるか気になるところですが、エラーになるようです。 a = [ 1, 2, 3, [ 4, 5, 6 ] ] b = [ 0, 0, 0 ] b << b puts a.flatten puts b.flatten #=> in `flatten': tried to flatten recursive …

String#each_byte

"Alice".each_byte do |c| puts c end

Array#each

単純なものでもすぐ忘れるので、何度でも書きましょう。 ary = [ "Alice", "Bobby", "Chris" ] ary.each do |e| puts e end実行結果はこうなります。 Alice Bobby Chris

Array#each_with_index

Rubyの練習。要素だけではなくインデクス付きのイテレーション。 ary = [ "Alice", "Bobby", "Chris" ] ary.each_with_index do |e, i| puts "#{i}: #{e}" end実行結果はこうなります。 0: Alice 1: Bobby 2: Chris疑問: ri Array#eachは表示されますが、ri …

今日からはてなダイアリー市民

「今日からはてなダイアリー市民です」というメールが来ました。ちょっとうれしかったりします。

FileUtilsとtexpdf.rb

pLaTeX→PDF変換をするバッチファイル的なスクリプトをRubyで書いてみました(texpdf.rb)。 require "fileutils" if ARGV.length == 0 puts "Usage: texpdf.rb filename[.tex]" exit end from = ARGV[0].gsub(/\.tex$/, "") tmp = ENV["TMP"] time = Time.now.…

Class.newとClass#new

Rubyでは、Class.new(クラスメソッド)ではClassのオブジェクト(無名のクラス)が作られ、Class#new(インスタンスメソッド)では、そのクラスのインスタンスが作られます。 klass = Class.new object = klass.new puts klass.class #=> Class puts object.cla…

4週間が過ぎました

「ほほえみつつ、Ruby。」をキャッチフレーズにしてRubyの勉強を続けています。早いもので、昨日が28日目、4週間が過ぎました。 エディタも2タブにしてみました。行末にセミコロンを書く癖が抜けてきました。変数の前に$がなくても気にならなくなりました。 …

times

RubyのtimesはIntegerのメソッドです。Floatを与えるとエラーになります。 5.times do |i| print "#{i}, " #=> 0, 1, 2, 3, 4, end (5.0).times do |i| #=> undefined method `times' for 5.0:Float (NoMethodError) print "#{i}, " end

load

Rubyのloadは、呼ぶたびにファイルを読みます。 FILENAME = "tmp.rb" open(FILENAME, "w") do |f| f.puts "puts 'Rubyco'" end load "#{FILENAME}" #=> Rubyco open(FILENAME, "w") do |f| f.puts "puts 'OK'" end load "#{FILENAME}" #=> OK File.unlink FI…

IO#each_byte

IO#each_byteで1バイトずつファイルを読むことができます。 FILENAME = "file" open(FILENAME, "w") do |f| f.puts "Hello!" f.puts "This is Rubyco." end File.open(FILENAME, "r") do |f| f.each_byte do |c| printf("%02X ", c) end end #=> 48 65 6C 6C…

` ... `

Rubyの` ... ` の扱いは、Perlのものと似ています。 `perl -v`.each do |line| print "> #{line}" end

alias

Rubyのaliasってすごいですね。 class Class alias originalNew new def new(hooks, *args) eval hooks originalNew(*args) end end class Rubyco def hello puts "Hello!" end end o = Rubyco.new(%Q(puts "new")) o.hello

Exerb

Exerbを使うと、RubyをWindowsの実行ファイルに変換できるようです。 Exerb

RAA

RAAはRuby Application Archiveだそうです。 RAA - Ruby Application Archive

WEBrickでproxy

WEBrickでプロキシを作る

trap

trap("INT")を使うと、CTRL+Cでも終了しなくなります。 # trap("INT") { puts "INT" } trap("EXIT") { puts "EXIT" } while true print "." sleep 1 end

gsub

Rubyのgsubはブロックを取ることができます。Perlのs///geと似ています。 s = "This is rubyco, who learns Ruby." t = s.gsub(/\w+/) do |matched| "(#{matched})" end puts s #=> This is rubyco, who learns Ruby. puts t #=> (This) (is) (rubyco), (who…

eval

Rubyのevalを使うと…evalできます。 s = <<"EOD" class Rubyco def self.hello puts "Hello!" end end EOD # Rubyco.hello #=> uninitialized constant Rubyco eval s Rubyco.hello #=> Hello! eval s.gsub(/Hello/, "Good") Rubyco.hello #=> Good!

NKF?

文字コードの変換をしようと思ったのですが、ri NKFでも、ri converterでも、ri Kconvでも、ri convertでも見つかりません。 疑問: riで探すのはまちがっているのでしょうか?→id:nurseさんからフォローをいただきました。1.8.5からは参照できるようになると…

Rubyに移植されたTropy

Rubyに移植されたTropy。

外側のself

Rubyの一番外側のスコープでのselfはmainというObjectのようです。 puts "1: #{self}, #{self.class}" #=> 1: main, Object module Rubyco puts "2: #{self}, #{self.class}" #=> 2: Rubyco, Module class Rubyco puts "3: #{self}, #{self.class}" #=> 3: R…

メソッドの中のクラス定義

さすがにメソッドの中のクラス定義は無理のようでした。 class Rubyco def rubyco class Rubyco #=> class definition in method body end end end

クラス定義の中のself

クラスメソッドの定義でself.メソッド名と書ける理由もよくわかります。selfは実際にそのクラスなのですね。 class Rubyco def self.hello puts "Hello!" end def Rubyco.goodbye puts "Bye!" end end Rubyco.hello #=> Hello! Rubyco.goodbye #=> Bye!

クラス定義をHTMLで

RubyのModuleクラスのインスタンス変数を使うと、クラス定義をリフレクトして出力できますね。 疑問: どうしてModule#public_class_methodsやModule#class_methodsがないのでしょうね。→id:sshiさんから、「クラス(モジュール)メソッドはクラス(モジュール)…