[erlang-questions] Floating guard sequences

Michael Radford <>
Fri Feb 20 07:59:20 CET 2009


Richard O'Keefe writes:
> It's sometimes overlooked that 'if' doesn't need more than one
> clause.  So we can always write
> 
> 	{X,[$x|Rest]} = string:to_integer(Str),
> 	if is_integer(X) -> true end,
> 	{Y,_        } = string:to_integer(Rest)

Of course this is a matter of taste, but I would tend to write the
second line as
	true = is_integer(X),
which emphasizes its nature as an assertion.  (I really do write lines
like that on a fairly regular basis, esp. in test code.)

Unfortunately the most helpful error message, when the assertion
fails, would be given by
	case X of _ when is_integer(X) -> ok end,
but that's ugly enough that one would be tempted to hide it with a
macro.

Mike



More information about the erlang-questions mailing list