2010-02-22 18 views
3

作爲函數參數傳遞Erlang記錄有什麼缺點嗎?作爲函數參數傳遞Erlang記錄有什麼缺點嗎?

+1

您能否將我發送給您找到的關於@gleber的鏈接,因爲我無法找到它? – Zubair 2010-02-23 12:14:55

+1

在第4位顯示的http://www.erlang.org/doc/reference_manual/records.html中輸入「erlang records」。該頁面包含有關內部表示的信息,以及在記錄使用的任何地方需要記錄的定義。這應該足以推導出答案 – gleber 2010-02-23 13:09:06

+0

嗨@gleber,再次:)你的意見實際上使stackoverflow值得一遊,因爲你對電腦有熱情,我喜歡這個!無論如何,你能否解釋一下你如何從這一頁中推斷出答案,因爲現在的答案都不一樣?這對我都很有用。我認爲@Dustin的答案也有其優點 – Zubair 2010-02-23 13:19:54

回答

3

erlangs標準庫中的一些函數確實在它們的接口中使用了記錄(現在我不記得哪些是記錄 - 但有幾個),但在我的愚見中,主要關閉是,用戶必須包含頭文件,才能使用你的函數。 (我從來沒有這樣做過,除非你使用stdlib中的函數),創建奇怪的相互依賴關係,並且很難從shell中使用(我會的從頭頂上知道如何從shell中加載&使用記錄 - 我通常只是通過手動構造元組來「欺騙」...)

另外,處理記錄與東西有點不同你通常會這樣做,因爲他們的默認鍵是把原子'undefined'作爲值,但是au與你通常用proplists做比較(沒有設置的值不存在) - 這可能會導致對於那些通常沒有很多記錄工作的人來說有些困惑。

因此,總而言之,我通常更喜歡proplist或類似的東西,除非我有充分的理由來使用記錄。儘管如此,我通常使用記錄的內部狀態,例如gen_server或gen_fsm;更新這種方式更容易一些。

5

沒有缺點,除非調用者函數和被調用的函數是用不同的'版本'編譯的。

+0

啊,當然,因爲它們是編譯時功能。可能不是一個好主意,然後使用客戶端API的記錄? – Zubair 2010-02-22 16:59:56

+1

不,我認爲使用記錄是好的您正在使用.hrl文件的正確版本,它被廣泛用於第三方模塊和應用程序以及一些核心模塊中 – 2010-02-23 12:43:24

2

我認爲最大的缺點是它不是慣用的。你有沒有看過一個需要你創建一個記錄並將其傳入的API?

爲什麼你想要做一些對於任何erlang程序員來說都感覺陌生的東西?有一個約定已經用於可選的命名參數。沒有好的原因發明另一種方式是毫無意義的。

+0

只要函數的返回值是一個記錄,爲什麼它不能用作輸入另一個? – Zed 2010-02-23 10:07:01