3

関数定義で一致する可能性はありますか?タプルのサブセットを実行しても、メソッドで完全なタプルを取得できますか?

私がやりたいことは次のようなものです:

myfun({ foo, Bar }: Var) -> otherfunction(Var, stuff).

それ以外の:

myfun({ foo, Bar }) -> otherfunction({ foo, Bar }, stuff).

これが十分に明確であることを願っています。

ありがとう。

4

3 に答える 3

7

アンダースコアを前に置くことで、一部のパラメーターを無視できます。例えば

myfun( {foo, _Bar, Var } )

_Bar パラメータを無視して一致します。それはあなたが念頭に置いていたことですか?

または、次のことを意味しました:

myfun( {foo, Bar} = Var ) -> otherfun( Var ).

この場合、myfun との一致が成功した場合、Varotherfun使用されます。その理由は 、式の評価時にVarがバインドされていないため、{foo, Bar}に割り当てられるためです。

于 2009-11-04T23:32:14.770 に答える
5

多分これはあなたが意味したものです:

myfun({foo, Bar } = Var) ->
  otherfunction(Var, stuff).

このようにして、関数を myfun/1 (1 つのパラメーター) としてエクスポートできます。2 つの要素を持つタプルにのみ一致します。最初のものは「foo」アトムでなければなりませんが、2番目のものは何でもかまいません。関数に別の句を指定しない限り、他のすべての場合に関数句を取得します。たとえば、次のようにすると理にかなっています。

myfun({foo, Bar } = Var) ->
  otherfunction(Var, stuff);
myfun(Var) ->
  {error, bad_format}.

ただし、これがあなたが求めているものであるかどうかは完全にはわかりません。これが役に立ったかどうか教えてください。

于 2009-11-04T23:31:44.680 に答える
-3

これが正しければ、簡潔にするために、追加のチェックを行うことなくVar、タプルマッチングのみを含むように設定する必要があります。{ foo, Bar }私がこれまでに見た限りでは、Erlang ではこれを行うことはできません。ごめん。:)

于 2009-11-04T23:37:24.883 に答える