是否有可能在函數定義中匹配做一些touple的子集,並且仍然可以在方法中獲得完整的touple?Erlang與別名匹配的模式
我想要做的是這樣的:的
myfun({ foo, Bar }: Var) -> otherfunction(Var, stuff).
代替:
myfun({ foo, Bar }) -> otherfunction({ foo, Bar }, stuff).
我希望這是非常明顯的。
謝謝。
是否有可能在函數定義中匹配做一些touple的子集,並且仍然可以在方法中獲得完整的touple?Erlang與別名匹配的模式
我想要做的是這樣的:的
myfun({ foo, Bar }: Var) -> otherfunction(Var, stuff).
代替:
myfun({ foo, Bar }) -> otherfunction({ foo, Bar }, stuff).
我希望這是非常明顯的。
謝謝。
您可以通過將下劃線放在前面來忽略某些參數。例如。
myfun({foo, _Bar, Var })
將被忽略_Bar參數相匹配。這是你想到的嗎?
還是你的意思:
myfun({foo, Bar} = Var) -> otherfun(Var).
,瓦爾將在otherfun當且僅當比賽與myfun成功使用。其原因是:瓦爾是未結合在所述表達式的求值的時間,並因此將被分配到{FOO,酒吧}。
也許這是你的意思:
myfun({foo, Bar } = Var) ->
otherfunction(Var, stuff).
通過這種方式,您可以將功能導出爲myfun/1(一個參數)。它只會在具有兩個元素的元組上匹配。第一個必須是「富」原子,而第二個可以是任何東西。在所有其他情況下,您將得到一個函數子句,除非您爲該函數指定了不同的子句。例如,它是有道理的有:
myfun({foo, Bar } = Var) ->
otherfunction(Var, stuff);
myfun(Var) ->
{error, bad_format}.
我不完全確定這就是你問的,但。請讓我知道這是否有幫助。
如果我有這個正確的,你想要的是設置Var
,只包含一個匹配的{ foo, Bar }
,而不需要做任何額外的檢查,爲簡潔起見。 據我所見,你不能在Erlang做到這一點。抱歉。 :)
你錯了:再次檢查你的答案。 – jldupont 2009-11-04 23:42:02
這是不正確的。正如其他兩個職位表明你確實可以做他在問什麼。 – 2009-11-05 02:21:38
您能否重新說明您的問題?這不是真的清楚我... – 2009-11-04 23:29:39
好吧,也許我應該收回它,你沒有回答這個問題對我來說,功=部分是什麼,我一直在尋找。事後看來,RTFM應該是正確的答案。 – ptriller 2009-11-04 23:48:07