module OutputHelper
def print_line(msg)
print msg + "\\n"
end
end
class SayHello
include OutputHelper
private :print_line
def initialize(name, &sayHello)
@name, @sayHello = name, sayHello
if @sayHello == nil
@sayHello = proc { |msg| print_line msg }
end
end
def salute(greet_msg)
@sayHello.call("Hello, #{@name}. #{greet_msg}.")
end
def salute_with_block(greet_msg)
if block_given?
yield "Hello, #{@name}. I'm using a block. #{greet_msg}."
else
@sayHello.call("Hello, #{@name}. You missed the block. #{greet_msg}.")
end
end
end
if __FILE__ == $0
say_hello = SayHello.new("Daniel") { |msg| print msg + "\\n" }
say_hello.salute("Greetings")
say_hello.salute_with_block("Greetings")
say_hello.salute_with_block("Greetings") { |msg| print msg + "\\n" }
say_hello = SayHello.new("Kimi")
say_hello.salute("Greetings, again")
end
- 定义module以及class。
- Mixin,将一个module动态include到class里面,使之具有相应的功能。
- method的访问级别,private, public等。很多动态语言没有这个功能。
- 向构造函数传入block类型的参数。
- 用proc方法构造block。
- 用block.call方法,调用一个block类型的变量。
- 用block_given?方法判断是否为一个方法传入了block参数。
- 用yield来调用为方法传入的block参数。
- 将测试代码写在if __FILE__ = $0 … end块中。很类似于Python。
- 用{|params| expressions }形式定义block。
Faulting application iexplore.exe, version 6.0.2900.2180, faulting module kernel32.dll, version 5.1.2600.2945, fault address 0x00012a5b.
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
Event ID 1000
我的IE6访问你的BLOG会报错…FIREFOX就没问题了. 以上是ERROR EVENT.
我用简体中文版的IE6.0没有问题啊~你用的是sp2的么?
竟然在kernel32里面出错了,太诡异了。
看了一下,装了SP2了
一般来说,IE crash都是因为你中了流氓软件或者病毒了~(MS想让IE6sp2更安全,结果就更安全的crash了)
你需要仔细检查一下。
IE7是除了Firefox的一个比较好的选择。(Opera也不错了,目前)
代码插件超级漂亮,能否介绍一下.
如果方便,给我回个邮件好了.谢谢.
还有就是我订阅了你的Blog了,BZ继续努力