TestCase 測試
ensure 不管有無錯誤,都將進入該代碼塊
例子
require 'test/unit'
module Kernel
def using(id)
begin
yield
ensure
id.dispose
end
end
end
class TestUsing < Test::Unit::TestCase
class Resource
def dispose
@disposed = true
end
def disposed?
@disposed
end
end
def test_disposes_of_resources
r = Resource.new
using(r){}
assert r.disposed?
end
def test_disposes_of_resources_in_case_of_exception
r = Resource.new
assert_raises(Exception){
using(r){
raise Exception
}
}
assert r.disposed?
end
end
local_variables 獲取當前作用域下可訪問的變量
class TestClass
v = 3
def print
var = 2
puts "#{local_variables.join(',')} in method"
end
puts "#{local_variables.join(',')} in class"
end
TestClass.new.print
instance_eval 訪問私有方法和變量 修改self對象
例1
class MyClass
def initialize
@v = 3
@v += 1
end
end
c = 2
obj = MyClass.new
s = obj.instance_eval{@v + c}
s1 = obj.instance_eval do
self
@v + c + 5
end
puts "s:#{s},s1:#{s1}"
例子2
class C
def initialize
@x , @y = 1, 2
end
end
puts C.new.instance_eval{[@x,@y]}.join(',')
例子3 # lambda , proc #方法塊
variable = lambda{
@var = 10
}
method = lambda{
instance_eval &variable
"put" if @var > 100
"push" if @var < 100
}
puts method.call