我正在尝试在Windows中使用Ruby进行一些脚本化的GUI测试。我正在利用pragprog book的指导,并且我遇到了一些问题。我已经分析了一些代码来帮助重复绘制win32api函数。代码如下:当没有参数提供时,Ruby的* args导致seg错误
module WindowsGui
def self.def_api(function, parameters, return_value)
api = Win32API.new 'user32', function, parameters, return_value
define_method(function.snake_case) do |*args|
api.call *args
end
end
end
...所以,我可以使用块下面的方式来定义模块中的多个win32APIs:
def_api 'FindWindow', ['P', 'P'], 'L'
我有一些RSpec的测试,以确保这表现得应该如此。
it 'wraps a Windows call with a method' do
find_window(nil, nil).should_not == 0
end
it 'enforces the argument count' do
lambda {find_window}.should raise_error
end
一切工作正常,第一次测试,第二次导致seg故障。似乎如果我没有参数调用这个,我不能碰*参数 - 但我可以做一个args.length来看看它是空的。
为什么会导致seg故障而不是异常?通过诸如此类的解决方案来解决这个问题是否可以接受......
还有一个问题太长了 - 对不起。
TIA! Bob
所以{| args | ...}在def_api调用中的块将充当args验证器(即由valid_args调用)?对不起,我对红宝石的认识有时并不那么深入。另外,我有点困惑valid_args?.call(* args)你可以提供更多的洞察力,知道那里发生了什么? 感谢一吨的快速回答,非常感谢... – 2010-07-12 13:49:55
Rad - 帮助吨。再次感谢您花时间解释,非常感谢。 – 2010-07-12 14:28:55