ruby-LEDの日記

2006-06-14

if文

#!/usr/bin/ruby

def test(count, tries)
	if count > 10
		puts "Try again"
	elsif tries == 3
		puts "You lose"
	else
		puts "Enter a number"
	end
end

test(10, 3)
=> You lose
test(10, 0)
=> Enter a number
test(11, 0)
=> Try again
    • もうちょい楽に試す方法はないかなぁ?
    • elsifを使うのか~
トラックバック - http://rubyist.g.hatena.ne.jp/ruby-LED/20060614

2006-06-13

ハッシュ

irb(main):001:0> instSection = {

irb(main):002:1* 'cello' => 'string',

irb(main):003:1* 'clarinet' => 'woodwind',

irb(main):004:1* 'drum' => 'percussion',

irb(main):005:1* 'oboe' => 'woodwing',

irb(main):006:1* 'trampet' => 'brass',

irb(main):007:1* 'violin' => 'string'

irb(main):008:1> }

=> {"trampet"=>"brass", "clarinet"=>"woodwind", "drum"=>"percussion", "cello"=>"string", "oboe"=>"woodwing", "violin"=>"string"}

irb(main):009:0> instSection['oboe']

=> "woodwing"

irb(main):010:0> instSection['cello']

=> "string"

irb(main):011:0> instSection['bassoon']

=> nil

    • 名前が指す(=>)のが中身です。
    • 中身が無ければ、nilを返します。
  • nil以外を返すようにも設定出来ます。

irb(main):001:0> histgram = Hash.new(0)

=> {}

irb(main):002:0> histgram['key1']

=> 0

irb(main):003:0> histgram['key1'] = histgram['key1'] + 1

=> 1

    • 普通に足し算できちゃう。
    • 配列ではどうなんでしょう?

irb(main):001:0> empty1 = Array.new(0)

=> []

irb(main):002:0> empty1[1]

=> nil

    • 常にnilが返ってきます。

irb(main):016:0> empty = Array.new(12)

=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]

irb(main):002:0> histgram = Hash.new("amrita")

=> {}

irb(main):003:0> histgram['key1']

=> "amrita"

irb(main):004:0> histgram['key1'] = histgram['key1'] + 1

TypeError: can't convert Fixnum into String

from (irb):4:in `+'

from (irb):4

from :0

irb(main):007:0> histgram['key1'] = histgram['key1'] + "12"

=> "amrita12"

irb(main):014:0> histgram['key1'] = histgram['key1'] + 12.to_s

=> "amrita1212"

    • 文字列に数字を直接足すことは出来ません。
    • 文字列同士は+で結合出来ます。
    • もしくは文字列に変換してから結合します。
  • 次は制御構造の予定
    • でもサンプルがそのままでは動きそうに無いので、どうしましょう?
トラックバック - http://rubyist.g.hatena.ne.jp/ruby-LED/20060613

2006-06-12

[]日本語の扱い

昨日うまくいかなかったコードid:mr-80bさんのヒントを元にLinux*1で実行してみたら。

irb(main):001:0> a = %w[ 日本語 ]

=> ["\306\374\313\334\270\354"]

irb-Ks付きで起動したら動きました!

$ irb -Ks

irb(main):001:0> a=%w{日本語 書ける かな?}

=> ["日本語", "書ける", "かな?"]

  • ありがとうございます。

*1:いつもはCygwin上で試してます。

トラックバック - http://rubyist.g.hatena.ne.jp/ruby-LED/20060612

2006-06-11

[]配列ハッシュ

  • 配列の宣言は[]で括る。さらに、各要素を,で区切る。

irb(main):001:0> a = [ 1, 'cat', 3.14 ]

=> [1, "cat", 3.14]

irb(main):002:0> a[0]

=> 1

irb(main):003:0> a[2] = nil

=> nil

    • シェルなら()で括って、,要らない
    • C言語なら{}で括って、,必要
      • うーん、なんで,が必要なんだろうなぁ?
  • aだけだと配列全部が出てくる

irb(main):004:0> a

=> [1, "cat", nil]

    • 具体的にどう使うのかは謎
      • きっとシェル引数に渡すみたいな使い方をするのだろう、と予想
    • シェルで全部だすには${hage[@]}
      • ということは、シェルよりよく使うのかな?
    • C言語だとハイパー面倒くさいので割愛

irb(main):006:0> empty1

=> []

irb(main):007:0> empty2 = Array.new

=> []

    • とりあえず需要が無い気がするなぁ。
      • しかし二種類も方法が用意されてるのは気になる。
    • そういえば、シェルで空の配列ってどういう概念なんだろう?
    • cだと配列型のポインタだと思うんだけど
  • 単語の配列をつくるには

irb(main):008:0> a = %w{ ant bee cat dog elk }

=> ["ant", "bee", "cat", "dog", "elk"]

irb(main):009:0> a[0]

=> "ant"

    • この場合は,が要らない。""で括る必要もない。

a = %w{ 日本語 }

a = %w{ "日本語" }

a = %w{ '日本語' }

いずれもエラーがでる。

unterminated string meets end of file

    • ありゃ?日本語の文字列処理ってどうやってやるんだろう?
トラックバック - http://rubyist.g.hatena.ne.jp/ruby-LED/20060611

2006-06-10

[]プログラミングRuby―達人プログラマーガイド 23:42

写本中(p9)にワーニングが出たぞい

irb(main):011:0> puts sayGoodnight "John-boy"

(irb):11: warning: parenthesize argument(s) for future version

Goodnight, John-boy

=> nilputs sayGoodnight "John-boy"

""の間の#{式}は展開される(p9)

irb(main):020:0> def sayGoodnight(name)

irb(main):021:1> "Goodnight, #{name}"

irb(main):022:1> end

=> nil

irb(main):023:0> puts sayGoodnight("John-Boy")

Goodnight, John-Boy

=> nil

p10の配列ハッシュで頭がパンク。続きは今度

  • %w?

ruby-LEDruby-LED2006/06/12 01:27"に書き忘れ。\nが改行に置換される。

トラックバック - http://rubyist.g.hatena.ne.jp/ruby-LED/20060610