ruby gem bacon.rb 源码阅读2

57 篇文章 0 订阅
27 篇文章 0 订阅

bacon.rb 源码阅读2
不敢谈源码分析了,因为自己水平不够呀,看C都比看gem的代码容易。
边看代码,边分析其每个用法。
比如
Counter=Hash.new(0)
的用法,我打开irb,做个试验,才发现,这是让每个hash的默认值变为0
再比如
RestrictName =// unless defined? RestrictName
也做个试验,才知道,原来是当变量没有定义时,才赋值给空串,如果已经定义,就不要赋空串了。
另个,代码中有一处用法 
module H1
  module H2
     def hello; p "haha"; end
  end
  extend H2
end

此时,可以如下用
H1.hello()

因为Bacon中用三个模块
SpecDoxOutput
TestUnitOutput
TapOutput
这三个模块定义的方法一样,
大致是:
module Bacon
  module SpecDoxOutput
  module TestUnitOutput
  module TapOutput
  extend SpecDoxOutput
end
也许也可以用其它的输出格式。没看懂。
module Bacon
  class Context
  end
end
其中,Context类也没看懂
然后作者在几个标准类中,加了猴子补丁。
如Object,TrueClass,FalseClass,Proc.
最后定义了
class Should

end
README中用例子
    >> require 'bacon'
    >> (1 + 1).should.equal 2
    => true
    >> (6*9).should.equal 42
    => false
我把例子,做了一次,感觉很好用。但如何实现的呢?
作者在Object中加了补丁,如下:
class Object
  def should(*args,&block)
    Should.new(self).be(*args,&block) 
  end
end
但,那个be又如何意思呢?
没看懂,我把《ruby元编程》能看懂,但看这个代码,真是让人受打击呀。230行的代码,居然不能从整体上理解,真是感觉不好。才230行呀。当然对其中有些语法不理解,如\W,raise?,rescue等异常处理熟悉,但这些小节不理解,导致对整体程序的理解不懂,我不认可。
读ruby代码与读c代码完全不同,因为它们的思路就不一定。也许是我读代码的方法不对。很多地方很奇怪,象把def写在一行中,却不加分号,如
def haha   1==2  end
我的理解是应该
def haha ;  1==2 ; end
作者不加分号,真怪????
还比如
def haha(*args,&block)

end
作者在子程序中却不使用block块,也真是怪???道行太浅,如果读代码象读小说那样,就好了,我期待中。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值