[读书笔记]Ruby元编程3

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





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值