2006-02-01から1ヶ月間の記事一覧
修正後。 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…
Rubyでは汚染された変数を使ったオペレーションに制限を持たせることができます。 $SAFE = 1 File.unlink ARGV[0] #=> in `unlink': Insecure operation - unlink (SecurityError)
RubyのString#splitを使うと、デリミタを使って文字列から配列が作れます。文字列と正規表現のどちらもデリミタにできます。 s = "Alice, Bobby, Chris,Diana, " p s.split(",") #=> ["Alice", " Bobby", " Chris", "Diana", " "] p s.split(/,\s*/) #=> ["A…
「ReFeなら表示されますよ」というアドバイスを以前いただいたので、ReFe(りふぇ)なるものをインストールしました。 ReFeからダウンロードして展開。 README.jaを読む。 ruby setup.rb config ruby setup.rb setup ruby setup.rb install refe-0.8.0\data\…
Rubyにも、Perl同様にマジカルインクリメントがありました。 puts "123456789".succ #=> 123456790 puts "XYZ".succ #=> XZA puts "<789>".succ #=> <790>
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 …
"Alice".each_byte do |c| puts c end
単純なものでもすぐ忘れるので、何度でも書きましょう。 ary = [ "Alice", "Bobby", "Chris" ] ary.each do |e| puts e end実行結果はこうなります。 Alice Bobby Chris
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 …
「今日からはてなダイアリー市民です」というメールが来ました。ちょっとうれしかったりします。
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.…
Rubyでは、Class.new(クラスメソッド)ではClassのオブジェクト(無名のクラス)が作られ、Class#new(インスタンスメソッド)では、そのクラスのインスタンスが作られます。 klass = Class.new object = klass.new puts klass.class #=> Class puts object.cla…
「ほほえみつつ、Ruby。」をキャッチフレーズにしてRubyの勉強を続けています。早いもので、昨日が28日目、4週間が過ぎました。 エディタも2タブにしてみました。行末にセミコロンを書く癖が抜けてきました。変数の前に$がなくても気にならなくなりました。 …
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
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で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
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を使うと、RubyをWindowsの実行ファイルに変換できるようです。 Exerb
RAAはRuby Application Archiveだそうです。 RAA - Ruby Application Archive
WEBrickでプロキシを作る
trap("INT")を使うと、CTRL+Cでも終了しなくなります。 # trap("INT") { puts "INT" } trap("EXIT") { puts "EXIT" } while true print "." sleep 1 end
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…
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!
文字コードの変換をしようと思ったのですが、ri NKFでも、ri converterでも、ri Kconvでも、ri convertでも見つかりません。 疑問: riで探すのはまちがっているのでしょうか?→id:nurseさんからフォローをいただきました。1.8.5からは参照できるようになると…
Rubyに移植されたTropy。
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は実際にそのクラスなのですね。 class Rubyco def self.hello puts "Hello!" end def Rubyco.goodbye puts "Bye!" end end Rubyco.hello #=> Hello! Rubyco.goodbye #=> Bye!
RubyのModuleクラスのインスタンス変数を使うと、クラス定義をリフレクトして出力できますね。 疑問: どうしてModule#public_class_methodsやModule#class_methodsがないのでしょうね。→id:sshiさんから、「クラス(モジュール)メソッドはクラス(モジュール)…