Ruby勉強

インターネットの企画職な人がプログラミングを勉強するブログ

Ruby Kernelモジュール#1 - Silver/Gold試験対策

  • Kernelはモジュール
  • Objectクラスのメソッド定義は実際はKernelモジュールが行なってインクルードしている
#変換
String(1) #=> "1"
Complex(1,2) #=> 1 + 2i
Hash(key: :value) #=> {:key => :value} 
Float(1) #=> 1.0
Float("1") #=> 1.0
Rational(2, 3) #=> 2/3

# callee ..呼ばれたもの
def hoge
  puts __callee__
end
hoge #=> hoge

puts __dir__ #=> /Users/hogehoge/Doceuments

# __method__はcalleeに近いが、aliasされていてももとの名前を示す。
def fuga
  p __method__
end
alias :bar :fuga
bar #=> fuga

# バッククオートでシェルコマンド実行
puts `ruby -v` #=> ruby 2.1.5

# ブロックがメソッドに与えられているか
def check
  if block_given?
    puts 'block is given.'
  else
    puts 'block isn\'t given.'
  end
end
check{} #=> block is given.

# evalは、引数の文字列を、プログラムとして評価する。
a = nil
eval('a = "hoge"; puts a')
#=> hoge

eval('def dar; puts "dar";end')
dar

# throw と catch
def baz
  puts 'alpha'
  throw :exit, 25
  puts "bravo"
end

ret = catch(:exit) do
  baz
  puts 'catch'
end
puts ret
#=> "alpha", 25
# catch文実行、直後にbazが実行され、alphaが吐かれたあと、throwでcatch文へ25という値と共にジャンプ。catch文の中身は実行されず、末尾に到達、retに25が投げ込まれる
# exit
puts 'start'
begin
  puts 'start1...'
  exit
rescue SystemExit => err
  puts "end1 with #{err.inspect}"
end
#=> start
#=> start1...
#=> end1 with #<SystemExit>
# exit
begin
  puts 'start2...'
  exit
ensure
  puts 'end2'
end
puts 'end2+' # 実行されない
#=> start2...
#=> end2
# exit!
begin
  puts 'start3...'
  exit!
ensure
  puts 'end3' # 実行されない
end
puts 'end3+' # 実行されない
#=> start3...
# failもしくはraise
raise #=> RuntimeError

raise(ArgumentError) #=> ArgumentError
raise(ArgumentError, "引数のエラーです") #=> 引数のエラーです (ArgumentError)