2016-11-30 3 views
1

Что делать, если я хочу вызвать случайную функцию, если утверждение if истинно?Как вызвать случайную функцию в lua?

local function move() end 
local function move2() end 
local function move3() end 

if (statement) then 
//make it choose a random function from the three which are above 
end 
+4

'local next_move = ({move, move2, move3}) [math.random (3)]; next_move() ' –

ответ

5

Вы рассмотрели возможность ввода этих функций в таблицу и выбор случайного индекса для функции, которая будет выполнена? Например, примерно следующее:

local math = require("math") 

function a() 
    print("a") 
end 

function b() 
    print("b") 
end 

function c() 
    print("c") 
end 

function execute_random(f_tbl) 
    local random_index = math.random(1, #f_tbl) --pick random index from 1 to #f_tbl 
    f_tbl[random_index]() --execute function at the random_index we've picked 
end 

-- prepare/fill our function table 
local funcs = {a, b, c} 

-- seed the pseudo-random generator and try executing random function 
-- couple of tens of times 
math.randomseed(os.time()) 
for i = 0, 20 do 
    execute_random(funcs) 
end 
+0

Этот код будет ошибочным. Вы вызываете 'f_tbl', прежде чем определять его как локальный. Lua не будет использовать локальные переменные за пределами блока, если они определены после функции. – ATaco

+1

@ATaco 'f_tbl' передается как аргумент для' execute_random() ', поэтому он не имеет ничего общего с локальным/глобальным охватом. Для здравого смысла и удобочитаемости я его переименую;) – Kamiccolo

+0

А, пропустил это. Все хорошо. – ATaco