[Wikimedia-l] Scribunto/Lua : how to call a local wiki module within a module

Brad Jorsch bjorsch at wikimedia.org
Wed Apr 3 13:20:12 UTC 2013


On Tue, Apr 2, 2013 at 9:46 AM, Mathieu Stumpf
<psychoslave at culture-libre.org> wrote:
>
> Sorry for the noise, but I didn't know where to post this. Please point me
> any place more appropriate for this kind of topic if you know one.

https://www.mediawiki.org/wiki/Talk:Lua_scripting is generally a good
place, as is https://en.wikipedia.org/wiki/Wikipedia:Lua_requests if
you can avoid sounding too off-topic. As for mailing lists, wikitech-l
might be appropriate too.

> And the relevant part are:
>
> pron = require( "Module:Pr0n" )
> for i=0,99 do
>     pron.ortho(i) -- fail!
> end
>
> Here is the error message:
>
> Erreur Lua dans Module:Pr0n à la ligne 37: attempt to index local 'frame' (a
> number value).

Your function expects a frame object,[1] as is required for it to be
called from #invoke, and you're passing it a number.

You can create a new frame object with
mw.getCurrentFrame():newChild.[2] Or, if the only thing you're using
from the frame object is frame.args, you can cheat and call it
something like

  pron.ortho( { args = { i } } )

Another option is to make two functions: one which takes a number, and
a second which takes a frame, extracts the number, and calls the
first:

  -- This can be called from other modules, test cases, etc
  function pron.orthoInternal( number ) {
      -- Existing code here
  }

  -- This wrapper is for calling using {{#invoke:}}
  function pron.ortho( frame ) {
      return pron.orthoInternal( frame.args[1] )
  }


 [1]: https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Frame_object
 [2]: https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#frame:newChild


-- 
Brad Jorsch
Software Engineer
Wikimedia Foundation



More information about the Wikimedia-l mailing list