[erlang-questions] Interesting style i haven't seen....

Bob Ippolito <>
Fri Oct 30 21:30:59 CET 2009


It is parameterized modules, just not implemented correctly. The only
reason it behaves that way is because of how they happen to be
implemented in current versions of erlang's VM and compiler. In some
future version of erlang the example at the beginning of this thread
is expected to no longer work.

On Friday, October 30, 2009, Greg Smyth <> wrote:
> Looking at your example, I don't think this is parameterised modules
> (although that is also interesting, thanks!).
>
> The confusing part (for me at least), is still the section:-
>
>> % 14> Dog = dog:new("Fido").
>> % ok
>>
>> % 15> Dog:woof().
>> % "Fido" says 'woof!'
>
> How does Value:function()  - change into
>
> module:function(Value)
>
> when Value = {module, Something}) ?
>
> Cheers,
> Greg
>
> On Fri, Oct 30, 2009 at 4:42 PM, Dale Harvey <> wrote:
>> The syntax is a bit wrong,
>> -module(dog, [Name]).
>> -export([woof/1]).
>> woof(Self) ->
>>  {dog, Name} = Self,
>>  io:format("~p says 'woof!'~n", [Name]).
>>
>> % 13> c(dog).
>> % {ok,dog}
>>
>> % 14> Dog = dog:new("Fido").
>> % ok
>>
>> % 15> Dog:woof().
>> % "Fido" says 'woof!'
>> % ok
>> but erlang does support it, parameterised modules
>> http://www.clickcaster.com/channel/tag/modules?channel=diveintoerlang
>> 2009/10/30 Dave Smith <>
>>>
>>> Is this a trick question? I feel like I'm missing something here... :)
>>>
>>> If the confusion is re: the use of "new", remember that Erlang has no
>>> concept of objects or explicit allocation (like that anyways).
>>>
>>> D.
>>>
>>> On Fri, Oct 30, 2009 at 10:25 AM, Greg Smyth <>
>>> wrote:
>>> > A friend just came up with this, and i thought it was pretty
>>> > interesting(arguments against doing this kind of thing in Erlang
>>> > aside...) as I'd never seen this type of thing done before...
>>> >
>>> > Anyone care to shed some light on why/how this works:-
>>> >
>>> > %%
>>> > -module(dog).
>>> > -export([new/1, woof/1]).
>>> >
>>> > new(Name) -> {dog, Name}.
>>> >
>>> > woof(Self) ->
>>> >  {dog, Name} = Self,
>>> >  io:format("~p says 'woof!'~n", [Name]).
>>> > %%
>>> >
>>> > % 13> c(dog).
>>> > % {ok,dog}
>>> >
>>> > % 14> Dog = dog:new("Fido").
>>> > % {dog,"Fido"}
>>> >
>>> > % 15> Dog:woof().
>>> > % "Fido" says 'woof!'
>>> > % ok
>>> >
>>> > Many thanks,
>>> > Greg
>>> >
>>> > ________________________________________________________________
>>> > erlang-questions mailing list. See http://www.erlang.org/faq.html
>>> > erlang-questions (at) erlang.org
>>> >
>>> >
>>>
>>> ________________________________________________________________
>>> erlang-questions mailing list. See http://www.erlang.org/faq.html
>>> erlang-questions (at) erlang.org
>>>
>>
>>
>
> ________________________________________________________________
> erlang-questions mailing list. See http://www.erlang.org/faq.html
> erlang-questions (at) erlang.org
>
>


More information about the erlang-questions mailing list