Strange behaviour with a record in a guard
    Bengt Kleberg 
    eleberg@REDACTED
       
    Mon Mar  3 10:19:12 CET 2003
    
    
  
> From: Åke Johansson AI (EAB) <ake.ai.johansson@REDACTED>
> To: erlang-questions@REDACTED
> Subject: Strange behaviour with a record in a guard
> Date: Mon, 3 Mar 2003 10:07:28 +0100 
> MIME-Version: 1.0
> 
> ...
> -record(r1,{f1})
> 
> foo(R) when R#r1.f1 == undefined ->
> 	ok.
> ...	
> 
> It seems like foo(R) matches any tuple of size 2 or bigger, where the second 
element is undefined. Should not the compiler add code which checks that R is a 
record of the correct type?
R#r1.f1 only gets the ''right'' element from the tuple.
if you want to check the record type, as well as the value of a field,
you need to write (here ''= R'' may be omitted if you are not
interested in the whole record):
foo( #r{f1=F1} = R ) when F1 == undefined ->
	ok.
note that this means it is usually better to do
#r{f1=F1} = R,
than
F1 = R#r.f1,
bengt
    
    
More information about the erlang-questions
mailing list