我正在嘗試在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