[erlang-questions] Ternary Like Operation Idiom in Erlang

Michael Turner <>
Thu Dec 3 10:08:45 CET 2009


>Thanks to Dale's version I came up with this.
>
>F = fun(T) -> case re:split(T,"=",[{return,list}]) of [K] -> {K,true};
>[K,V] -> {K,V} end end.

Cute, but with whitespace trailing after the "=", you get {key, " "},
which might not be the desired behavior.  Moreover, an embedded "=" in
the Value part (e.g, key='a=1' or something ridiculous like that) will
cause it to fail, which also might not be desired behavior.  Getting
close, though.

The following

Fm = fun(T) ->
   case re:split(string:strip(T),"=",[{return,list}]) of
    [K] -> {K, true};
    [K | V] -> {K, string:join (V, "=")}
   end
end.

seems to cover those cases.  I'm assuming you don't care that there's
no whitespace stripped from the left end of the V string.  But maybe you
do.

It's admittedly now too long to a candidate for "idiomatic Erlang."  I
wonder if it could be significantly shorter, but still robust?  I'd
love to pursue this further, but I just got an urgent call about some
gig that involves biting the heads off of live chickens.


-michael turner


On 12/2/2009, "Jarrod Roberson" <> wrote:

>Thanks to Dale's version I came up with this.
>
>F = fun(T) -> case re:split(T,"=",[{return,list}]) of [K] -> {K,true};
>[K,V] -> {K,V} end end.
>
>in action
>
>Eshell V5.7.3  (abort with ^G)
>1> F = fun(T) -> case re:split(T,"=",[{return,list}]) of [K] ->
>{K,true}; [K,V] -> {K,V} end end.
>#Fun<erl_eval.6.13229925>
>2> F("key").
>{"key",true}
>3> F("key=value").
>{"key","value"}
>4> F("key=").
>{"key",[]}
>5>
>
>________________________________________________________________
>erlang-questions mailing list. See http://www.erlang.org/faq.html
>erlang-questions (at) erlang.org
>
>


More information about the erlang-questions mailing list