marg-do's

関数型生活

Ruby

lambda関数のつくりかた

メモ a = ->(x){x*2} b = lambda{|x| x*3} a.(3) #=> 6 b.(3) #=> 9

for...in文とeachイテレータのスコープ

array = [1,2,3,4,5] for x in array puts x end array.each do |y| puts y end puts x #=>5 puts y #=>エラーを返す eachメソッド内のブロックは独自のスコープを持つ

Rangeオブジェクトにおけるcase等値演算子の定義とcase文

Rangeオブジェクトにおいてcase等値演算子(===)は以下のように定義される。 左辺(Rangeオブジェクト)が示す範囲内に右辺の値が属していればtrue、それ以外はfalse。 (1..10) === 4 #=> true (1..10) === 10 #=> true (1..10) === 10.1 #=> false case文にお…

論理演算子&&を定義してみる

class Object def myand(x) if self == nil false elsif self == false false else if x == nil false elsif x == false false else x end end end end a = 5 b = nil a.myand(b) #=> nil (a&&bと同じ役割) 絶対もっと上手い書き方ありますが…。 内部では…

論理演算子||による式の評価

a = "01234" true || a.reverse! #(1) a #=>"01234" この場合、(1)式の左辺のみで(1)式の評価が決定され、右辺は評価されない。

Rubyが変数とメソッドを区別する瞬間

def a 1 end a #=> 1 (メソッドaの実行) a = 0 if false a #=> nil (変数aの参照) a = 2 a #=> 2 (変数aの参照) 以上のように、Rubyは、変数の定義式が現れた瞬間に、aをメソッドではなく変数への参照として扱い始める。 実際の代入が行われているかど…

Rubyは再帰呼び出しを何回出来るか

def endless(x) endless(x-1) if x != 1 end i=1 while(true) do puts i endless(i) i+=1 end 環境によっても違うのかもしれませんが、8735で止まった。

selfとはインスタンス自身の参照である

class Test def initialize @num = 5 end def cp self end attr_accessor :num end test = Test.new test2 = test.cp test2.num=3 pp test.num #=>3 pp test2.num #=>3 より明らか

配列に定義された定数とは?

プログラミング言語 Ruby(93p)にて、以下の様なコードがあった modules[0]::NAME 配列内に存在する定数を参照しているようだが、一体どのように定義できるのか? class Test NAME = "aaa" end modules = Array.new modules[0] = Test.new puts modules[0]::N…