Advertisement
egor230

lua tutorial

Feb 19th, 2019
125
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 14.53 KB | None
  1. Вывод на экран
  2.  
  3. print("i love")
  4.  
  5. функцию для вычисления факториала данного числа,
  6. function fact (n)
  7.     if n == 0 then
  8.         return 1
  9.     else
  10.         return n * fact(n-1)
  11.     end
  12. end
  13.  
  14. print("enter a number: ")
  15. a = io.read("*number")        -- read a number
  16. print(fact(a))
  17.  
  18.  
  19. загрузка функций из файла.
  20. \\moduie.lua
  21. function norm (x, y)
  22.     local n2 = x^2 + y^2
  23.     return math.sqrt(n2)
  24. end
  25.  
  26. function twice (x)
  27.     return 2*x
  28. end
  29.  
  30.  
  31.  
  32. dofile("D:\\Program Files (x86)\\lua\\moduie.lua")   -- load your library
  33. n = norm(3, 2)
  34. print(twice(n))      --> 7.0880180586677
  35.  
  36. синус
  37. print(math.sin(12))
  38.  
  39. типы  переменных.
  40.  
  41. print(type("Hello world"))  --> string
  42. print(type(10.4*3))         --> number
  43. print(type(print))          --> function
  44. print(type(type))           --> function
  45. print(type(true))           --> boolean
  46. print(type(nil))            --> nil
  47. print(type(type(X)))        --> string
  48.  
  49. print(type(a))   --> nil   (`a' is not initialized)
  50. a = 10
  51. print(type(a))   --> number
  52. a = "a string!!"
  53. print(type(a))   --> string
  54. a = print        -- yes, this is valid!
  55. a(type(a))       --> function
  56.  
  57.  
  58. изменение строки, путем создание новой.
  59. a = "first string"-- исходная строка
  60. b = string.gsub(a, "first", "second")  --  создать новую строку.
  61. print(a)       --> first string
  62. print(b)       --> second string
  63.  
  64.  
  65.  
  66. проверка на число.
  67.  
  68. print("write number ")
  69. line = io.read()     -- read a line
  70. n = tonumber(line)   -- try to convert it to a number
  71. if n ~= nil then
  72.     print(n.." mul on 2 = "..n*2)
  73. else
  74.     error(line .. " is not a valid number")
  75. end
  76.  
  77.  
  78. Чтобы преобразовать число в строку, вы можете вызвать функцию tostring или объединить число с пустой строкой:
  79.  
  80. print (tostring (10) == "10") -- true
  81. print (10 .. "" == "10") -- true
  82.  
  83. таблицы
  84.  
  85. t = {} -- создаем пустую таблицу
  86. t[1] = "first" -- новое поле таблицы, с ключом 1 и значением "first"
  87. print(t[1])
  88. t[2] = 20 -- новое поле, с ключом 2 и значением 20
  89. k = "name"
  90. print(t[k])--nill
  91. t[k] = "Jane" -- новое поле, с ключом "name" и значением "Jane"
  92. print(t[k]) --jane
  93. a = t[1] -- переменная a получает значение "first"
  94. b = t[2] -- переменная b получает значение 20
  95. c = t["name"] -- переменная c получает значение "name"
  96.  
  97.  
  98.  
  99. a = {}  -- пустая таблица
  100. for i=1,100 -- заполнить ее элементами
  101. do a[i] = i*2 end-- значение ключа умножено на 2.
  102. print(a[9])   --> 18
  103. a["x"] = 10
  104. print(a["x"])  --> 10
  105. print(a["y"])  --> nil
  106.  
  107. --[[Распространенная ошибка начинающих - путать a.x с a[x]. a["x"] собой таблицу,
  108. проиндексированную строкой "x". a.x - это таблица, проиндексированная
  109. по значению переменной x. Увидеть разницу:]]
  110. a = {}
  111. x = "y"
  112. a.x= 20
  113. a[x] = 10                 -- put 10 in field "y"
  114. print(a[x])   --> 10      -- value of field "y"
  115. print(a.x)    --> 20 -- value 20
  116. print(a.y)    --> 10      -- value of field "y"
  117.  
  118.  
  119. i = 10; j = "10"; k = "+10"
  120. a = {}
  121. a[i] = " i"
  122. a[j] = " j"
  123. a[k] = " k"
  124. print(a[j])            -- j
  125. print(a[tonumber(j)])  -- i
  126. print(a[k])            -- k
  127. print(a[tonumber(k)])  -- i
  128.  
  129. больше или меньше
  130.  
  131. x =30
  132. y =20
  133. min = (x < y) and x or y
  134. max = (x > y) and x or y
  135. print("min "..min.."\nmax "..max)
  136.  
  137.  
  138.  
  139. a = "Hello"
  140. print(a)               --> Hello
  141. print(a .. " World")   --> Hello World
  142.  
  143.  
  144. print("Введите число ")
  145. x = io.read()
  146. print("Число, которое Вы ввели " ..x )  -- 2 точки знак конкатенация строк
  147. print("Введите  число 1 ") -- Ввод данных
  148. x = io.read()
  149. print("Введите число 2 ") -- Ввод данных
  150. y = io.read()
  151. print("Сумма чисел = " ..x+y )  -- 2 точки знак конкатенация строк
  152. print("Введите  число  ") -- Ввод данных
  153. x = io.read()
  154. print("Введите степень числа  ") -- Ввод данных
  155. y = io.read()
  156. function  mul (x,y)  
  157.    return   x^y
  158. end  
  159. print(mul(x,y))
  160. local f = "D:\\1.txt"-- имя файла
  161. local fwrite -- переменная файла
  162. fwrite = io.open(f, "a")-- открыть файл
  163. fwrite:write("jhn")-- записать в файл
  164. fwrite:close()-- закрыть файл
  165. print("Введите  число итерации ") -- Ввод данных
  166. x = io.read()
  167.  
  168. for i = 1,  x  do
  169.    print(i)
  170.     y = i ^2  
  171.    print("Квадрат " .. i.." равен ".. y)
  172. end  
  173.  
  174. function  f (n)
  175.     print(n+1)  return  foo(n)  end
  176.  
  177. function foo(n)
  178.  print(n) end
  179. --f(2)
  180. function  add (a)
  181.     local sum = 0
  182.     for i = 1,  a  do
  183.         sum = sum + i
  184.     end
  185.     return  sum
  186. end            
  187.  b = add(3) -- складывает  элементы  последовательности  'a'
  188. --print(b)
  189.  s, e = string.find("ehello  Lua usersg", "sg")
  190. --print(s,  e)                          
  191. function  ad (...)
  192.     local s = 0
  193.     for i,  v in  ipairs{...} do
  194.         s = s + v
  195.     end
  196.     return  s
  197. end
  198. --print(ad(3,  4, 5, 6, 7))    
  199.  
  200. for i = 1,  math.huge do
  201.     if  (i  - 500 >=  0)  then
  202.         print(i)
  203.         break
  204.     end
  205. end
  206. revDays = {["Sunday"]     = 1,  ["Monday"]        = 2,
  207.                       ["Tuesday"]   = 3,  ["Wednesday"] = 4,
  208.                       ["Thursday"]  = 5,  ["Friday"]        = 6,
  209.                       ["Saturday"]  = 7}
  210. x = "Wednesday"
  211. print(revDays[x])        
  212. [[
  213.  
  214. for i = -10,  10  do
  215.     print(i,  i % 3)
  216. end
  217.  
  218. days  = {"Sunday",  "Monday", "Tuesday",  "Wednesday",  "Thursday",
  219. "Friday", "Saturday"}
  220.  
  221. print(days[6])      
  222. print(x%y) -- остаток от деление
  223. a = {}
  224. x = 'y'
  225. a[x]  = 10                                  --  записывает  10  в поле  "y"
  226. print(a[x])       --> 10          --  значение  поля  "y"
  227. print(a.x)          --> nil       --  значение  поля  "x" (не определено)
  228. print(a.y)  ]]
  229. a ={"LANDSTAL ", "BRAVURA ", "BUFFALO ", "LINERUN "}
  230. b = {"400",  "401",  "402",  "403",  }
  231.  
  232. c={}
  233. for k,v in ipairs(a) do
  234. for k1,v1 in  ipairs(b) do
  235. if k == k1
  236. then --print("[\""..v.."\"".."] =" ..v1)
  237. c[v]=v1
  238.  end end end
  239. for k,v in pairs(c) do
  240. print("[\""..k.."\"".."] =" ..v)
  241. end
  242.  
  243.  
  244. a = {k=0}
  245.  
  246. b = {money =100}
  247. metatable = { __index = b }
  248. setmetatable(a, metatable)
  249. print(a.money)
  250.  
  251. a = {keya="keya"}
  252. b = setmetatable({key0="v"}, { __newindex = a})
  253. b.key="до"
  254. print(b.key0)
  255. b.key1 = "новый ключ б"
  256. print(a.key)
  257. print(b.keya)
  258.  
  259. foo = {key0=0}
  260. foo.key = 'ключ из foo' --[[2]]
  261. mt = {__index = foo} -- setmetatable возвращает первый переданный в неё аргумент
  262. bar = setmetatable(foo, {__index = foo})
  263. bar.key2 ='бар' -- Тестирование:
  264. print(bar.key0) --> 0
  265. print(foo.key0) --> 0
  266. print(bar.key) --> 'ключ из foo'
  267. print(foo.key) --> 'ключ из foo'
  268. print(bar.key2) --> 'бар'
  269. print(foo.key2) --> бар
  270.  
  271.  
  272. foo = {}
  273. mt  = {}
  274. function mt.__newindex(self, key, value)
  275.   foo[key] = value
  276. end
  277.  
  278. bar = setmetatable({a = 10}, mt)
  279. bar.key = 'vaue'
  280.  
  281. print('bar.key', bar.key) --> nil
  282. print('foo.key', foo.key) --> 'value'
  283.  
  284. local car  = {}
  285. car.__index = car  --__index содержит указатель на сам класс.
  286. function car.set(color) --Создает экземпляр теперь уже объекта
  287. self = setmetatable({}, car) --Переопределяет метатаблицу .
  288.     self.color = color
  289.   return self
  290. end
  291. function car.get_color(self)
  292.   z = self.color
  293.  return z
  294. end
  295. i  = car.set("black") -- ставим точку
  296. print(i:get_color())
  297.  
  298.  
  299.  
  300. local a  = {} -- Прежде чем создавать экземпляры объекта, необходимо описать соответствующий ему класс.
  301. a.__index = a  --__index содержит указатель на сам класс. Это нужно будет для правильной
  302. --работы оператора self
  303. function a.set(x) --Создает экземпляр теперь уже объекта, описывает поля объекта и присваивает полям
  304.     --начальные значения.
  305.  local self = setmetatable({}, a) --Переопределяет метатаблицу вновь созданного объекта,
  306.     --  в результате чего объект получает доступ к методам класса. Методов пока нет, но они будут описаны позже.
  307.  self.x = x
  308.  return self
  309. end
  310. function a.get(self)
  311.     return  self.x
  312. end
  313. local i = a.set(1) -- ставим точку
  314. print(i:get())
  315.  
  316.  
  317.  
  318.  
  319.  
  320. car = {}
  321. function car:set(model)
  322. local object = {}
  323. object.model = model
  324. setmetatable(object,self)
  325. self.__index = self
  326. return object
  327. end
  328. function car:get()
  329. return self.model
  330. end
  331. m = car:set("URAL") --меняем название и цвет
  332. print(m:get()) --
  333.  
  334.  
  335.  
  336.  
  337. local Account = {}
  338. Account.__index = Account--
  339. function Account:deposit(balance)
  340.  local obj = {balance = balance};
  341.   setmetatable(obj, self)   return obj;
  342.   end
  343.  function Account:withdraw(v)
  344.  z = self.balance+v
  345. return z
  346. end
  347.  local v = Account:deposit(60);
  348. z = v:withdraw(20);
  349. --print(z)
  350.  
  351. local vec = {} -- Прежде чем создавать экземпляры объекта, необходимо описать соответствующий ему класс.
  352. vec.__index = vec;--__index содержит указатель на сам класс. Это нужно будет для правильной работы оператора self
  353. function vec:new(x) --Создает экземпляр теперь уже объекта, описывает поля объекта и присваивает полям начальные значения.
  354.  local obj = {x =x };
  355.   setmetatable(obj, self) --Переопределяет метатаблицу вновь созданного объекта, в результате чего объект получает доступ к методам класса. Методов пока нет, но они будут описаны позже.
  356.   return obj;
  357.   end
  358.  function vec:get(y)
  359.  z = self.x+y
  360. return z
  361. end
  362.  local v = vec:new(6);
  363. z = v:get(2);
  364. --print(z)
  365.  
  366. Person= {}
  367. --тело класса
  368. function Person:new(fName, lName)    -- свойства
  369.     local obj= {}
  370.         obj.firstName = fName
  371.         obj.lastName = lName
  372.     -- метод
  373.     function obj:getName()
  374.         return self.firstName
  375.     end     --чистая магия!
  376.     setmetatable(obj, self)
  377.     self.__index = self; return obj
  378. end
  379.  
  380. --создаем экземпляр класса
  381. vasya = Person:new("Вася", "Пупкин")
  382.  
  383. --обращаемся к свойству
  384. --print(vasya.firstName)    --> результат: Вася
  385.  
  386. --обращаемся к методу
  387. --print(vasya:getName())  --> результат: Вася
  388. function MyClass.new(init)
  389.   local self = setmetatable({}, MyClass)
  390.   self.value = init
  391.   return self
  392. end
  393. function MyClass.set_value(self, newval)
  394.   self.value = newval
  395. end
  396. function MyClass.get_value(self)
  397.   return self.value
  398. end
  399. local i = MyClass.new(5)
  400. -- tbl:name(arg) is a shortcut for tbl.name(tbl, arg), except tbl is evaluated only once
  401. --print(i:get_value()) --> 5
  402.  
  403. local car  = {} -- Прежде чем создавать экземпляры объекта, необходимо описать соответствующий ему класс.
  404. car.__index = car  --__index содержит указатель на сам класс. Это нужно будет для правильной работы оператора self
  405. function car.set(model, color) --Создает экземпляр теперь уже объекта, описывает поля объекта и присваивает полям начальные значения.
  406.   local self = setmetatable({}, car) --Переопределяет метатаблицу вновь созданного объекта, в результате чего объект получает доступ к методам класса. Методов пока нет, но они будут описаны позже.
  407.     self.color = color
  408.     self.model = model
  409.   return self
  410. end
  411. function car.get_color(self)
  412.   z = self.color
  413.  return z
  414. end
  415. function car.get_model(self)
  416.   z = self.model
  417.  return z
  418. end
  419. local i = car.set("kia","black") -- ставим точку
  420. print(i:get_model())
  421.  
  422. --> 5 --print(i:get_color()) --> 5
  423. moto = {} --пусть у него будет один свой метод
  424. moto.__index = moto
  425. function moto.wheel()
  426.   print("trololo")
  427. end
  428. --setmetatable(moto,{__index =car}) --наследуемся
  429. --local m = moto.set("zi","ye")
  430. --print(moto:get_model())
  431. car = {} --создадим "класс" автомобиль
  432. function car:set(model, color) --инициализируем поля класса
  433. local object = {}
  434. object.model = model or "UAZ" -- по умолчанию это будет УАЗ
  435. object.color = color or "ponos" -- поносового цвета
  436. setmetatable(object,self) --далее идет превращение таблицы в "класс", объяснять не буду, т.к для этого нужна отдельная статья
  437. self.__index = self --перед index стоит двойное подчеркивание!
  438. return object -- возвращаем объект!
  439. end --создадим первый автомобиль!
  440. function car:get() --функция получения результата
  441. return self.model, self.color
  442. end
  443. moto = {} -- инициализируем класс мото
  444. function moto:pet() --переназначение метода
  445. return "new"
  446. end
  447. setmetatable(moto,{__index = car}) --наследуемся
  448. m = moto:set("URAL","BLUE") --меняем название и цвет
  449. print(m:get()) -->мы увидим 2000 year
  450. print(m:pet()) --> URAL BLUE
  451.  
  452.  
  453. function sleep(ms)
  454.     local b = os.clock() * 1000
  455.     while os.clock() * 1000 - b <= ms do end
  456. end
Advertisement
RAW Paste Data Copied
Advertisement