lispとrubyとpythonと その2(ruby) ver2

その2のruby編。
ほとんど更新なし。
ミリ秒取得部分とinstance_evalを書いたくらい。
ruby楽だなー。common lispに比べると・・・。

# -*- coding: utf-8 -*-
#! /usr/bin/ruby -Ku

#参考
#http://www.namaraii.com/rubytips/

#文字列連結
puts  s = "abc" + "あいうえお"
#->abcあいうえお

#文字列の分解
"あaあ,いiい,うuう,えeえ".split(",").each{|e| puts e}
#->あaあ
#  いiい
#  うuう
#  えeえ

#文字列検索
puts "あいうえおかきくけこさしすせそ".index "かきくけこ"
#->5

#部分文字列の取得
s = "あいうえおabcde"
puts s[5..10]
#->abcde

#特定の文字の場所を探して部分文字列取得とかありがちじゃない?
target = "あいうえお-かきくけこ"
puts target[target.index("-") + 1..target.length]
#->かきくけこ

#文字列比較
#普通の文字列比較
puts "true" if "aaa" == "aaa"
#->true

#case-insensitiveな比較
#upperしてから比較
puts "true" if "aaa".upcase == "Aaa".upcase
#->true

#rubyでは==とeql?が同値性比較でequal?が同一性比較
puts "a" if [1,2] == [1,2]
#->a

puts "b" if [1,2].eql?([1,2])
#->b

puts "c" if [1,2].equal?([1,2])
#=>nil

arr = [1,2]
puts "d" if arr.equal?(arr)
#->d

#数字→文字列
puts 123.000.to_s
#->123.0

#文字列→数値
puts "123".to_i + 1
#->124

puts "123.000".to_f + 1
#->124.0

#日付と時刻参考
#http://www.namaraii.com/rubytips/?%C6%FC%C9%D5%A4%C8%BB%FE%B9%EF
#http://doc.loveruby.net/refm/api/view/method/Time/i/strftime
#日付→文字列
#現在日付
dt = Time.now
require "time"
puts dt.strftime "%Y/%m/%d %H:%M:%S"

#ミリ秒単位での取得
#マイクロ秒がusecに入っている
puts dt.strftime "%Y/%m/%d %H:%M:%S." + (dt.usec / 1000).to_s

#文字列->日付
puts Time.parse("2008/07/10 12:13:14").strftime "%Y-%m-%d %H-%M-%S"

#日付計算
#足し算は秒を足す
(Time.parse("2008/12/24 00:00:00") + (5 * 60 * 60)).strftime("%Y-%m-%d %H-%M-%S")
#->"2008-12-24 05-00-00"

#引き算は差の秒が返る
span = Time.parse("2008/12/24 00:00:00") - Time.parse("2008/12/13 00:00:00")
printf "あと%s時間でクリスマスイブ\n", span / 60 / 60
#->あと264.0時間でクリスマスイブ

#標準出力に出力
puts "こんにちは"

#フォーマットするならprintf
printf "%s-%s-%s", 1, 2,3

#標準入力から読み込み
printf (s = readline) until s == "exit\n"

#コマンドライン引数の取得
ARGV.each{|arg| puts arg}

#こっちでもいい
$*.each{|arg| puts arg}

#コマンド名をとるときは$0fで
puts $0

#その他
#object.instance_evalっていうのがあった
#objectのコンテキストでブロックを実行するって
#
Time.now.instance_eval{ puts strftime("%Y-%m-%d %H-%M-%S") }
#->2008-12-14 12-49-40

class Foo
  def set(msg)
    @fld = msg
  end
end

foo = Foo.new
foo.set "hello world"
foo.instance_eval{puts @fld}
#->hello world