[erlang-questions] Why can't I use array:size in a guard in a method?

Richard Carlsson carlsson.richard@REDACTED
Sun Jul 28 00:02:53 CEST 2013


On 2013-07-27 20:22, Yves S. Garret wrote:
> The code:
>
> printArray(Array, Size, IndexToStartWith)
>      when array:size(Array) > IndexToStartWith ->
>    io:format("~w~n", [array:get(IndexToStartWith, Array)]),
>    printArray(Array, Size, IndexToStartWith + 1).
>
> The error:
>
>  > c(arrays_example).
> arrays_example.erl:23: illegal guard expression
> error
>
> Why not?  I could pass the size of the array along (hence the Size
> variable), but why not procure
> the length in the guard on the fly?

You can't use any remote calls (m:f(...)) in a guard. Guards must be 
side effect free, and if the function is in another module, the compiler 
can't guarantee that (in particular considering that the other module 
could be replaced at runtime with code that does something completely 
different).

    /Richard




More information about the erlang-questions mailing list