2015-06-01から1ヶ月間の記事一覧
p Class.ancestors #=> [Class, Module, Object, Kernel, BasicObject] p Class.instance_methods(false) #=> [:allocate, :new, :superclass] # クラス名 FirstClass = Class.new # 無名クラス klass = Class.new # クラス名 NamedClass = klass klass.name…
rubyのブロックはクロージャである ブロック外の変数nを参照したり代入できる。(defメソッドなどではできない) n = 10 100.times{ n += 10 } puts n カリー化。引数を最初から耳揃えて渡さなくても良いことになる。 bar = ->(fuga, hoge){hoge+fuga}.curry p…
def hoge(a, b, &fuga) fuga.call(a*b) end hoge(2, 3) {|arg| puts "a,bを掛け算して#{arg}でした" } def bar(a, b) puts yield(a*b) end hoge(2, 3) {|arg| puts "a,bを掛け算して#{arg}でした" } procオブジェクトの実行には & + callでも yieldでもどち…
まずはメソッドから メソッドの計算結果は代入できるものの、 メソッド式を丸ごと代入できない Object#methodによって、メソッドを変数に代入できる。 def hoge p 1 end a = method(:hoge) a.call #=> 1 a.() #=> 1 a[] #=> 1 def fuga(num) p num end b = m…
Kernelモジュールにraiseメソッドがあり、エラーを発生させることができる raise ZeroDivisionError #=> ZeroDivisionError # エラークラスを指定しない場合はRuntimeError begin raise rescue => e p e end #=> RunTimeError raise ZeroDivisionError, "0で…
すべてのエラークラスのヒエラルキー。 StandardErrorとそれシステム系のエラークラス分類を覚えておく SystemCallErrorが、StandardErrorの下にあったり、 プログラムバグとしては頻発するであろう、NameError-NoMethodErrorが、 StandardErrorの配下にもか…
redoとnextの出力の違いを確認 redo ary = ("a".."d").to_a v = 0 ary.each do |str| v += 1 if v == 3 redo end print("#{v}: #{str}") unless str == ary.last print(", ") end end #=> 1: a, 2: b, 4: c, 5: d next ary = ("a".."d").to_a m = 0 ary.each…
whileとuntil a = 0 while a < 10 puts "#{a += 1}回目の実行中" end puts "while終了しました" until a >= 20 puts "#{a += 1}回目の実行中" end puts "until終了しました" for for i in [1,2,3,4] puts i end break while true break # 中断して脱出 puts …
;ループとスコープ。 for文は独自のスコープを持たない for i in [1,2,3] do num = i end puts i #=> 3 [1,2,3].each do |i| num = i end puts num #=>undefined local variable or method `num': NameError 100.times do |i| i end p i #=>undefined local …