Question about parametrized modules

Filipe David Manana <>
Sun Aug 8 15:47:27 CEST 2010


I have a function_clause error when calling some functions of a parametrized
module which use one of the module parameters.
The module in question (from mochiweb) is like:

-module(mochiweb_request, [Socket, Method, RawPath, Version, Headers]).
-export([get/1]).

% ...

get(socket) ->
   Socket;
get(scheme) ->
   case mochiweb_socket:type(Socket) of
       plain ->
           http;
       ssl ->
           https
   end;
get(method) ->
   Method;
get(raw_path) ->
   RawPath;
get(version) ->
   Version;
get(headers) ->
   Headers;

Then, from another module, which has an instance of that parametrized module
(mochiweb_request) I have:

1) a call like MochiReq:get(socket)  - this one succeeds

2) a call like MochiReq:get(scheme) - it fails with the stack trace bellow:

           {error,function_clause,
               [{mochiweb_request,get,
                    [scheme,
                     {mochiweb_request,#Port<0.2224>,'GET',"/_utils",
                         {1,1},
                         {10,
                          {"host",
                           {'Host',"localhost:5984"},
                           {"accept",
                            {'Accept',

"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"},
                            nil,
                            {"accept-language",
                             {'Accept-Language',"en-us,en;q=0.5"},
                             {"accept-encoding",
                              {'Accept-Encoding',"gzip,deflate"},
                              {"accept-charset",
                               {'Accept-Charset',
                                   "ISO-8859-1,utf-8;q=0.7,*;q=0.7"},
                               nil,nil},
                              nil},
                             {"connection",
                              {'Connection',"keep-alive"},
                              {"cache-control",
                               {'Cache-Control',"max-age=0"},
                               nil,nil},
                              {"cookie",
                               {'Cookie',
                                   "5984_recent=testdb;
AuthSession=ZmRtYW5hbmE6NEM1RUEyMkE60TPWV73IdXUYV68s4MUDLuI4P6o"},
                               nil,nil}}}},
                           {"user-agent",
                            {'User-Agent',
                                "Mozilla/5.0 (Macintosh; U; Intel Mac OS X
10.6; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"},
                            {"keep-alive",{'Keep-Alive',"115"},nil,nil},
                            nil}}}}]},

I suspect there's something missing in mochiweb_request:get(scheme) when
referencing the module parameter Socket.
Does anyone have an idea an can explain me what's wrong?

cheers

-- 
Filipe David Manana,


"Reasonable men adapt themselves to the world.
 Unreasonable men adapt the world to themselves.
 That's why all progress depends on unreasonable men."


More information about the erlang-questions mailing list