我正在開發的項目有很多內置的遙測和調試機制,必須在發佈版本中提供,但絕不能在系統的大部分部分中使用。我想建立一個宏,在這樣的方法的頂部被調用,如果方法沒有被一個非常有限的模塊組中的一個調用,將會拋出一個異常。Erlang:有沒有比堆棧跟蹤中的正則表達式更好的方式來判斷堆棧中是否有東西?
例如,我有我可以用它來從控制檯操縱系統狀態的調試模塊,我有一個網絡工具,允許管理員檢查和更改系統。一些爲其使用而設計的方法(但是在整個系統中以模塊實現)對於偶爾使用而言是很好的,但是如果有人在將它們稱爲正常操作的一部分的過程中犯了錯誤,那麼這些方法會很糟糕。
編輯:我已經試過清單:keysearch建議,下,它可以用於任何模塊,我可以明確的名字,這可能是我曾經打算管理最好的。我有像web_foo,web_bar,web_foo_other,web_yippie_ki_yea_mf等模塊,以配合我回歸正則表達式。
我可以做類似以下的事情。 (我沒有編譯這個已經。我希望你給任何答案會阻止我曾經把這個投入生產。=])
try
%gotta do this to get the stacktrace:
throw(a)
catch
_ ->
Stack = erlang:get_stacktrace(),
{_, RegExp} = re:compile("webmanager", [multiline]),
case Match = re:run(Stack, RegExp) of
nomatch ->
throw(im_sorry_dave__im_afraid_i_cant_do_that);
{match, _} ->
ok
end
end
從我的小Erlang經驗來看,它看起來不像Erlang。我認爲最好不要使用try-catch。 – ipinak