<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Lua генерирует и исполняет код]]></title><description><![CDATA[<p dir="auto">Функция loadstring позволяет исполнять текст как код. Попробуем генерировать числа, сравнения чисел и логику И, ИЛИ.</p>
<p dir="auto">Цель: просто пример.<br />
Создать пары случайных чисел А и Б.<br />
Случайно сравнить попарно.<br />
Создать случайно логику  "И, ИЛИ" и сравнить результаты сравнения до тех пор, пока не будут истинны</p>
<pre><code>function CheckTrue(parameter, strue, sfalse)  if parameter then  print(strue)  else  print(sfalse)  end	end


ProgrammCompare_AxB = {}
function ProgrammCompare_AxB:New(_name, _tableStringCondition)

	local obj 						= {}
	obj.programmName 			=  _name
	obj.tableStringCondition 	=  _tableStringCondition
	obj.stringCondition			=  ''
	obj.randomProgramm 		=  ''
	
	function obj:MakeProgramm() 
		obj.stringCondition = obj.tableStringCondition[math.random(1, #obj.tableStringCondition)]
		print(obj.stringCondition)
		obj.randomProgramm =  'function ' ..obj.programmName..'(a, b) return a '..obj.stringCondition..' b end'
	end
	
	function obj:RunProgramm(a, b) 
		loadstring (obj.randomProgramm)()
		result = nil
		
		loadstring (string.format('result = %s(%s,%s)', obj.programmName, a, b))()
		CheckTrue ( result, string.format('a = %s, b = %s, result = true', a, b), string.format('a = %s, b = %s, result = false', a,b) )
		return result
	end

	setmetatable(obj, self)
	obj.__index = ProgrammCompare_AxB
	return obj
end

compareProgramm1 = ProgrammCompare_AxB:New('ProgrammCompare_AxB_1', { '&gt;', '&lt;', '&gt;=', '&lt;=', '==', '~=' })
compareProgramm2 = ProgrammCompare_AxB:New('ProgrammCompare_AxB_2', { 'and', 'or' })
  
repeat
	compareProgramm1:MakeProgramm() 
	compareProgramm2:MakeProgramm() 
	-- Подбирать значения
	local a = compareProgramm1:RunProgramm(math.random(1, 100), math.random(1, 100))
	local b = compareProgramm1:RunProgramm(math.random(1, 100), math.random(1, 100))
	local c = compareProgramm2:RunProgramm(a, b)
until  c
</code></pre>
<p dir="auto">Пример вывода в Cheat Engine:</p>
<pre><code>&gt;= 
or 
a = 83, b = 75, result = true 
a = 18, b = 86, result = false 
a = true, b = false, result = true 
</code></pre>
<p dir="auto">Т.е.</p>
<pre><code>(83 &gt;= 75 or 18 &gt;= 86) == true, т.к. первое условие верное 83 &gt;= 75
83 &gt;= 75 = true
18 &gt;= 86 = false
</code></pre>
]]></description><link>https://celua.ru/topic/103/lua-генерирует-и-исполняет-код</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 23:46:27 GMT</lastBuildDate><atom:link href="https://celua.ru/topic/103.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 May 2023 13:03:17 GMT</pubDate><ttl>60</ttl></channel></rss>