Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Prints to the screen (Can end with semicolon)
- print("Hello World")
- --[[
- Multiline comment
- ]]
- -- Variable names can't start with a number, but can contain letters, numbers
- -- and underscores
- -- Lua is dynamically typed based off of the data stored there
- -- This is a string and it can be surrounded by ' or "
- name = "Derek"
- -- Another way to print to the screen
- -- Escape Sequences : \n \b \t \\ \" \'
- -- Get the string size by proceeding it with a #
- io.write("Size of string ", #name, "\n")
- -- You can store any data type in a variable even after initialization
- name = 4
- io.write("My name is ", name, "\n")
- -- Lua only has floating point numbers and this is the max number
- bigNum = 9223372036854775807 + 1
- io.write("Big Number ", bigNum, "\n")
- io.write("Big Number ", type(bigNum), "\n")
- -- Floats are precise up to 13 digits
- floatPrecision = 1.999999999999 + 0.0000000000005
- io.write(floatPrecision, "\n")
- -- We can create long strings and maintain white space
- longString = [[
- I am a very very long
- string that goes on for
- ever]]
- io.write(longString, "\n")
- -- Combine Strings with ..
- longString = longString .. name
- io.write(longString, "\n")
- -- Booleans store with true or false
- isAbleToDrive = true
- io.write(type(isAbleToDrive), "\n")
- -- Every variable gets the value of nil by default meaning it has no value
- io.write(type(madeUpVar), "\n")
- -- ---------- MATH ----------
- io.write("5 + 3 = ", 5+3, "\n")
- io.write("5 - 3 = ", 5-3, "\n")
- io.write("5 * 3 = ", 5*3, "\n")
- io.write("5 / 3 = ", 5/3, "\n")
- io.write("5.2 % 3 = ", 5%3, "\n")
- -- Shorthand like number++ and number += 1 aren't in Lua
- -- Math Functions: floor, ceil, max, min, sin, cos, tan,
- -- asin, acos, exp, log, log10, pow, sqrt, random, randomseed
- io.write("floor(2.345) : ", math.floor(2.345), "\n")
- io.write("ceil(2.345) : ", math.ceil(2.345), "\n")
- io.write("max(2, 3) : ", math.max(2, 3), "\n")
- io.write("min(2, 3) : ", math.min(2, 3), "\n")
- io.write("pow(8, 2) : ", math.pow(8, 2), "\n")
- io.write("sqrt(64) : ", math.sqrt(64), "\n")
- -- Generate random number between 0 and 1
- io.write("math.random() : ", math.random(), "\n")
- -- Generate random number between 1 and 10
- io.write("math.random(10) : ", math.random(10), "\n")
- -- Generate random number between 1 and 100
- io.write("math.random(1,100) : ", math.random(1,100), "\n")
- -- Used to set a seed value for random
- math.randomseed(os.time())
- -- Print float to 10 decimals
- print(string.format("Pi = %.10f", math.pi))
- -- ---------- CONDITIONALS ----------
- -- Relational Operators : > < >= <= == ~=
- -- Logical Operators : and or not
- age = 13
- if age < 16 then
- io.write("You can go to school", "\n")
- local localVar = 10
- elseif (age >= 16) and (age < 18) then
- io.write("You can drive", "\n")
- else
- io.write("You can vote", "\n")
- end
- -- A variable marked local is local only to this if statement
- -- io.write("Local Variable : ", localvar)
- if (age < 14) or (age > 67) then io.write("You shouldn't work\n") end
- -- Format, convert to string and place boolean value with string.format
- print(string.format("not true = %s", tostring(not true)))
- -- There is no ternary operator in Lua
- -- canVote = age > 18 ? true : false
- -- This is similar to the ternary operator
- canVote = age > 18 and true or false
- io.write("Can I Vote : ", tostring(canVote), "\n")
- -- There is no Switch statement in Lua
- -- ---------- STRINGS ----------
- quote = "I changed my password everywhere to 'incorrect.' That way when I forget it,it always reminds me, 'Your password is incorrect.'"
- io.write("Quote Length : ", string.len(quote), "\n")
- -- Return the string after replacing
- io.write("Replace I with me : ", string.gsub(quote, "I", "me"), "\n")
- -- Find the index of a matching String
- io.write("Index of password : ", string.find(quote, "password"), "\n")
- -- Set characters to upper and lowercase
- io.write("Quote Upper : ", string.upper(quote), "\n")
- io.write("Quote Lower : ", string.lower(quote), "\n")
- -- ---------- LOOPING ----------
- i = 1
- while (i <= 10) do
- io.write(i)
- i = i + 1
- -- break throws you out of a loop
- -- continue doesn't exist with Lua
- if i == 8 then break end
- end
- print("\n")
- -- Repeat will cycle through the loop at least once
- repeat
- io.write("Enter your guess : ")
- -- Gets input from the user
- guess = io.read()
- -- Either surround the number with quotes, or convert the string into
- -- a number
- until tonumber(guess) == 15
- -- Value to start with, value to stop at, increment each loop
- for i = 1, 10, 1 do
- io.write(i)
- end
- print()
- -- Create a table which is a list of items like an array
- months = {"January", "February", "March", "April", "May",
- "June", "July", "August", "September", "October", "November",
- "December"}
- -- Cycle through table where k is the key and v the value of each item
- for k, v in pairs(months) do
- io.write(v, " ")
- end
- print()
- -- ---------- TABLES ----------
- -- Tables take the place of arrays, dictionaries, tuples, etc.
- -- Create a Table
- aTable = {}
- -- Add values to a table
- for i = 1, 10 do
- aTable[i] = i
- end
- -- Access value by index
- io.write("First Item : ", aTable[1], "\n")
- -- Items in Table
- io.write("Number of Items : ", #aTable, "\n")
- -- Insert in table, at index, item to insert
- table.insert(aTable, 1, 0)
- -- Combine a table as a String and seperate with provided seperator
- print(table.concat(aTable, ", "))
- -- Remove item at index
- table.remove(aTable, 1)
- print(table.concat(aTable, ", "))
- -- Sort items in reverse
- table.sort(aTable, function(a,b) return a>b end)
- print(table.concat(aTable, ", "))
- -- Create a multidimensional Table
- aMultiTable = {}
- for i = 0, 9 do
- aMultiTable[i] = {}
- for j = 0, 9 do
- aMultiTable[i][j] = tostring(i) .. tostring(j)
- end
- end
- -- Access value in cell
- io.write("Table[0][0] : ", aMultiTable[1][2], "\n")
- -- Cycle through and print a multidimensional Table
- for i = 0, 9 do
- for j = 0, 9 do
- io.write(aMultiTable[i][j], " : ")
- end
- print()
- end
- -- ---------- FUNCTIONS ----------
- function getSum(num1, num2)
- return num1 + num2
- end
- print(string.format("5 + 2 = %d", getSum(5,2)))
- function splitStr(theString)
- stringTable = {}
- local i = 1
- -- Cycle through the String and store anything except for spaces
- -- in the table
- for str in string.gmatch(theString, "[^%s]+") do
- stringTable[i] = str
- i = i + 1
- end
- -- Return multiple values
- return stringTable, i
- end
- -- Receive multiple values
- splitStrTable, numOfStr = splitStr("The Turtle")
- for j = 1, numOfStr do
- print(string.format("%d : %s", j, splitStrTable[j]))
- end
- -- Variadic Function recieve unknown number of parameters
- function getSumMore(...)
- local sum = 0
- for k, v in pairs{...} do
- sum = sum + v
- end
- return sum
- end
- io.write("Sum : ", getSumMore(1,2,3,4,5,6), "\n")
- -- A function is a variable in that we can store them under many variable
- -- names as well as in tables and we can pass and return them though functions
- -- Saving an anonymous function to a variable
- doubleIt = function(x) return x * 2 end
- print(doubleIt(4))
- -- A Closure is a function that can access local variables of an enclosing
- -- function
- function outerFunc()
- local i = 0
- return function()
- i = i + 1
- return i
- end
- end
- -- When you include an inner function in a function that inner function
- -- will remember changes made on variables in the inner function
- getI = outerFunc()
- print(getI())
- print(getI())
- -- ---------- COROUTINES ----------
- -- Coroutines are like threads except that they can't run in parallel
- -- A coroutine has the status of running, susepnded, dead or normal
- -- Use create to create one that performs some action
- co = coroutine.create(function()
- for i = 1, 10, 1 do
- print(i)
- print(coroutine.status(co))
- if i == 5 then coroutine.yield() end
- end end)
- -- They start off with the status suspended
- print(coroutine.status(co))
- -- Call for it to run with resume during which the status changes to running
- coroutine.resume(co)
- -- After execution it has the status of dead
- print(coroutine.status(co))
- co2 = coroutine.create(function()
- for i = 101, 110, 1 do
- print(i)
- end end)
- coroutine.resume(co2)
- coroutine.resume(co)
- -- ---------- FILE I/O ----------
- -- Different ways to work with files
- -- r: Read only (default)
- -- w: Overwrite or create a new file
- -- a: Append or create a new file
- -- r+: Read & write existing file
- -- w+: Overwrite read or create a file
- -- a+: Append read or create file
- -- Create new file for reading and writing
- file = io.open("test.lua", "w+")
- -- Write text to the file
- file:write("Random string of text\n")
- file:write("Some more text\n")
- -- Move back to the beginning of the file
- file:seek("set", 0)
- -- Read from the file
- print(file:read("*a"))
- -- Close the file
- file:close()
- -- Open file for appending and reading
- file = io.open("test.lua", "a+")
- file:write("Even more text\n")
- file:seek("set", 0)
- print(file:read("*a"))
- file:close()
- -- ---------- MODULES ----------
- -- A Module is like a library full of functions and variables
- -- Use require to gain access to the functions in the module
- convertModule = require("convert")
- -- Execute the function in the module
- print(string.format("%.3f cm", convertModule.ftToCm(12)))
- -- ---------- METATABLES ----------
- -- Used to define how operations on tables should be carried out in regards
- -- to adding, subtracting, multiplying, dividing, concatenating, or
- -- comparing tables
- -- Create a table and put default values in it
- aTable = {}
- for x = 1, 10 do
- aTable[x] = x
- end
- mt = {
- -- Define how table values should be added
- -- You can also define _sub, _mul, _div, _mod, _concat (..)
- __add = function (table1, table2)
- sumTable = {}
- for y = 1, #table1 do
- if (table1[y] ~= nil) and (table2[y] ~= nil) then
- sumTable[y] = table1[y] + table2[y]
- else
- sumTable[y] = 0
- end
- end
- return sumTable
- end,
- -- Define how table values should be checked for equality
- __eq = function (table1, table2)
- return table1.value == table2.value
- end,
- -- For homework figure out how to check if less then
- __lt = function (table1, table2)
- return table1.value < table2.value
- end,
- -- For homework figure out how to check if less then or equal
- __le = function (table1, table2)
- return table1.value <= table2.value
- end,
- }
- -- Attach the metamethods to this table
- setmetatable(aTable, mt)
- -- Check if tables are equal
- print(aTable == aTable)
- addTable = {}
- -- Add values in tables
- addTable = aTable + aTable
- -- print the results of the addition
- for z = 1, #addTable do
- print(addTable[z])
- end
- -- ---------- OBJECT ORIENTED PROGRAMMING ----------
- -- Lua is not an OOP language and it doesn't allow you to define classes
- -- but you can fake it using tables and metatables
- -- Define the defaults for our table
- Animal = {height = 0, weight = 0, name = "No Name", sound = "No Sound"}
- -- Used to initialize Animal objects
- function Animal:new (height, weight, name, sound)
- setmetatable({}, Animal)
- -- Self is a reference to values for this Animal
- self.height = height
- self.weight = weight
- self.name = name
- self.sound = sound
- return self
- end
- -- Outputs a string that describes the Animal
- function Animal:toString()
- animalStr = string.format("%s weighs %.1f lbs, is %.1f in tall and says %s", self.name, self.weight, self.height, self.sound)
- return animalStr
- end
- -- Create an Animal
- spot = Animal:new(10, 15, "Spot", "Roof")
- -- Get variable values
- print(spot.weight)
- -- Call a function in Animal
- print(spot:toString())
- -- ---------- INHERITANCE ----------
- -- Extends the properties and functions in another object
- Cat = Animal:new()
- function Cat:new (height, weight, name, sound, favFood)
- setmetatable({}, Cat)
- -- Self is a reference to values for this Animal
- self.height = height
- self.weight = weight
- self.name = name
- self.sound = sound
- self.favFood = favFood
- return self
- end
- -- Overide an Animal function
- function Cat:toString()
- catStr = string.format("%s weighs %.1f lbs, is %.1f in tall, says %s and loves %s", self.name, self.weight, self.height, self.sound, self.favFood)
- return catStr
- end
- -- Create a Cat
- fluffy = Cat:new(10, 15, "Fluffy", "Meow", "Tuna")
- print(fluffy:toString())
Advertisement
Add Comment
Please, Sign In to add comment