Files
jlengrand.github.io/_posts/2012-02-16-execute-a-function-given-its-name-as-a-string.markdown
Julien Lengrand-Lambert c9cc716349 back to HTTP
2018-03-17 11:41:01 +01:00

50 lines
2.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
layout: post
status: publish
published: true
title: Execute a function given its name as a string!
author: Julien Lengrand-Lambert
author_login: jlengrand
author_email: julien@lengrand.fr
author_url: http://www.lengrand.fr
wordpress_id: 526
wordpress_url: http://www.lengrand.fr/?p=526
date: 2012-02-16 22:30:25.000000000 +01:00
categories:
- programming
- Lua
tags:
- web
- html
- software
- lua
- string
- function
comments: []
---
Well, interesting problem. . . if you are not working with Lua.
Some time ago, I developed a web interface that would interface with <a title="mipsee" href="http://www.advansee.com/mipsee.html">the camera I was working with</a>.
Being a fully autonomous system, <strong>Mipsee</strong> has limited ressources and<strong> PHP and databases</strong> were surely not the good solution for an embedded interface. I finally ended up with a<strong> Lua + HTML combo</strong>.
The idea was to be able to start a computer vision application (face detection, blob tracking, . . .) and see the results in real time directly from the web interface.
I searched for a simple way to detect and integrate new applications as they would be developed, <strong>without modifying the interface layer</strong>. In addition, those application would have <strong>variable inputs and outputs</strong>.
My solution was to bind any new binary with an interface file that would define inputs and outputs for the given application.
And here came the issue : I would have <strong>the name of the binary as a string value</strong>. <strong>How to launch it</strong> when needed?
Well, this could be a problem in C; but I was in Lua . . . Magic trick !
Problem solved in 3 simple lines of code :
{% highlight php %}
post_func = loadstring("param = printf(\"Hello ! \")")
post_func()
appli_repo = os.execute(param)
{% endhighlight %}
if I want to execute param.
At first glance, I hated working with <a title="lua" href="http://www.lua.org/"><strong>Lua</strong> </a>which was way<strong> too messy and undocumented</strong> for me. But I'm still impressed by the capabilities of the language when correctly used.
For those who don't know Lua, this is a (portguese) language particularly used in video games. The user interface of WOW is for example fully developed in Lua  (and I still wonder why . . .).
So, if some of you know any other advantage of working with Lua, let me know ;).