Polymorphic record question

Bengt Kleberg <>
Tue Jun 20 09:51:03 CEST 2006


On 2006-06-20 08:17, Andrew Lentvorski wrote:
> Richard A. O'Keefe wrote:

...deleted
>> I'm a little surprised that the "downcasting" hack worked at all,
>> and I wouldn't expect it to _keep_ working in future releases.
> 
> Yeah, I was a bit surprised that it worked, too.  Presumably the 
> compiler just does a mapping from record field to tuple position number 
> and doesn't bother checking the first field to make sure that the names 
> match.

if you want to discover errors when using records it is best to avoid 
''.'' to access the members. see example below:

-module(t).

-export([main/1]).

-record(a,{data=a}).
-record(b,{data=b}).

main(_) ->
	A = #a{},
	B = #b{},
	should_not_work(B, A),
	will_fail(B, A),
	init:stop().

should_not_work(A, B) ->
	A_data = A#a.data,
	B_data = B#b.data,
	io:fwrite( "A_data ~w~n", [A_data] ),
	io:fwrite( "B_data ~w~n", [B_data] ).
	
will_fail(A, B) ->
	#a{data=A_data} = A,
	#b{data=B_data} = B,
	io:fwrite( "A_data ~w~n", [A_data] ),
	io:fwrite( "B_data ~w~n", [B_data] ).


bengt
-- 
    EPO guidelines 1978: "If the contribution to the known art resides
    solely in a computer program then the subject matter is not
    patentable in whatever manner it may be presented in the claims."



More information about the erlang-questions mailing list