From febc8d7fe97c212de6fcf3cc130eb908f700a463 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 14 Mar 2022 11:57:54 +0100 Subject: [PATCH] Test inclusione intero file LUA --- MP.MONO.DECODER/MP.MONO.DECODER.csproj | 3 + MP.MONO.DECODER/Program.cs | 2 + MP.MONO.DECODER/lua/prova.lua | 181 +++++++++++++++++++++++++ 3 files changed, 186 insertions(+) create mode 100644 MP.MONO.DECODER/lua/prova.lua diff --git a/MP.MONO.DECODER/MP.MONO.DECODER.csproj b/MP.MONO.DECODER/MP.MONO.DECODER.csproj index 04b6345..a02f86e 100644 --- a/MP.MONO.DECODER/MP.MONO.DECODER.csproj +++ b/MP.MONO.DECODER/MP.MONO.DECODER.csproj @@ -33,6 +33,9 @@ Always + + Always + Always diff --git a/MP.MONO.DECODER/Program.cs b/MP.MONO.DECODER/Program.cs index f29d693..315abf1 100644 --- a/MP.MONO.DECODER/Program.cs +++ b/MP.MONO.DECODER/Program.cs @@ -30,6 +30,8 @@ state.DoString(" print(compute(0.25)) "); // Reading values back state.DoString(" x = compute(0.75) "); state.DoString(" y = 2.0 * (obj.IntegerProperty * x) "); +string luaPath = Path.Combine(Directory.GetCurrentDirectory(), "lua", "prova.lua"); +state.DoFile(luaPath); double x = state.GetNumber("x"); double y = state.GetNumber("y"); // Will print: x = -0.1875, y = -6.375 diff --git a/MP.MONO.DECODER/lua/prova.lua b/MP.MONO.DECODER/lua/prova.lua new file mode 100644 index 0000000..8adb133 --- /dev/null +++ b/MP.MONO.DECODER/lua/prova.lua @@ -0,0 +1,181 @@ + +-- This is a one-line comment that ends at the end of the line +--[[ This a multi-line (long) [comment](http://www.lua.org/manual/5.1/manual.html#2.1) + that ends with this closing bracket --> ]] +--[=[ This is also a long comment ]=] + +-- [Numbers](http://www.lua.org/manual/5.1/manual.html#2.1) +hours = 54 +regularRate = 16 + +-- [Arithmetic operators](http://www.lua.org/manual/5.1/manual.html#2.5.1) +-- `+` (addition), `-` (subtraction), `*` (multiplication), `/` (division), +-- `%` (modulo), `^` (exponentiation), and unary `-` (negation) +overtimeRate = regularRate * 1.5 +totalPay = 40 * regularRate + (hours-40) * overtimeRate + +-- [Relational operators](http://www.lua.org/manual/5.1/manual.html#2.5.2) +-- `==` (equal), `~=` (not equal), `<` (less), `>` (more), +-- `<=` (less or equal), and `>=` (more or equal) +-- these operators always result in `false` and `true`. +isOvertime = hours > 40 +isTheSame = + math.min(regularRate, overtimeRate) == -math.max(-regularRate, -overtimeRate) + +-- [Logical operators](http://www.lua.org/manual/5.1/manual.html#2.5.3): `and`, `or`, and `not` +-- The conjunction operator `and` returns its first argument if this value is `false` or `nil`; +-- otherwise, `and` returns its second argument. +-- The disjunction operator `or` returns its first argument if this value is different from `nil` +-- and `false`; otherwise, `or` returns its second argument. +-- Both `and` and `or` use short-cut evaluation: the second operand is evaluated only if needed. +a = 10 or 20 --> 10 +a = 10 or 'something else' --> 10 +a = 10 and 20 --> 20 +a = false and 10 --> false + +-- [Strings](http://www.lua.org/manual/5.1/manual.html#2.1) +firstName = 'Paul' +lastName = "Kulchenko" +escapedDoubleQuote = "She said: \"You shouldn't be doing this\"" +stringWithQuotes = [[She said: "You shouldn't be doing this"]] +-- \\ escapes the slash itself; \n encodes a new line +moreEscapes = 'She said:\n\"You shouldn\'t be doing\\ this\"' + +-- [Concatenation](http://www.lua.org/manual/5.1/manual.html#2.5.4) +fullName = firstName .. ' ' .. lastName --> Paul Kulchenko + +-- [Formatting](http://www.lua.org/manual/5.1/manual.html#pdf-string.format) +message = ('The payment amount for %s is %d'):format(fullName, totalPay) + +-- Placeholders +-- %d placeholder is for integer numbers +print(("%d"):format(5)) --> 5 +-- %s placeholder is for strings +print(("%s"):format('string')) --> string +-- %f placeholder is for real numbers +print(("%.2f"):format(1.5)) --> 1.50 +-- `.2` in `%.2f` specifies the number of decimal digits to be printed +-- %.0f placeholder truncates real numbers +print(("%.0f"):format(1.5)) --> 1 + +-- [Patterns and Captures](http://www.lua.org/manual/5.1/manual.html#5.4.1) +local text = '21.12,24.16,"-1.1%"' +-- match one digit +print(string.match(text, '%d')) --> 2 +-- match one or more digits +print(string.match(text, '%d+')) --> 21 +-- match a (real) number with an optional minus +print(string.match(text, '%-?%d[%.%d]*')) --> 21.12 +-- match and captures two numbers separated by a comma +print(string.match(text, '(%-?%d[%.%d]*),(%-?%d[%.%d]*)')) --> 21.12 24.16 + +-- **Output** +print(message) -- the output also includes a new line +print("The payment amount is " .. totalPay) +print() -- this prints an empty line + +-- **Input** ([io.read](http://www.lua.org/manual/5.1/manual.html#pdf-file:read)) +print("What is your name? ") +name = io.read() -- reads one line +print("What is your age? ") +age = io.read('*n') -- reads one number ignoring whitespaces +print("You've entered " .. name .. ' and ' .. age) + +-- [Function call](http://www.lua.org/manual/5.1/manual.html#2.5.8) +result = math.max(overtimeRate, regularRate) -- this function returns one result +print(result) -- the function `print` doesn't return any results + +-- [Function definition](http://www.lua.org/manual/5.1/manual.html#2.5.9) +function myfunction(arguments) -- this function takes one parameter + -- body of the function + return 1, 2, 3 -- this function returns three values +end + +-- [Identifiers](http://www.lua.org/manual/5.1/manual.html#2.1) +-- Identifier is any string of letters, digits, and underscores, not beginning with a digit. +-- Identifiers (also called names) are used to name variables and table fields. +-- Lua keywords (`if`, `local`, `do`, and others) are reserved and cannot be used as names. + +-- [Variables](http://www.lua.org/manual/5.1/manual.html#2.3) +-- Variables are places that store values. +-- There are three kinds of variables in Lua: global variables, local variables, and table fields. + +-- [Assignment](http://www.lua.org/manual/5.1/manual.html#2.4.3) +-- multiple variables localized +local a, b = 1, 2 +-- this is the same as +local a = 1 +local b = 2 + +-- swapping two variables +local a, b = b, a + +-- assigning multiple values returned by a function +local a, b, c = myfunction() -- assigns 1, 2, 3 to a, b, c + +-- [Scope and visibility rules](www.lua.org/manual/5.1/manual.html#2.6) +-- The scope of variables begins at the first statement after their declaration +-- and lasts until the end of the innermost block that includes the declaration. +x = 10 -- global variable +do -- new block + local x = x -- new 'x', with value 10 + print(x) --> 10 + x = x+1 + do -- another block + local x = x+1 -- another 'x' + print(x) --> 12 + end + print(x) --> 11 +end +print(x) --> 10 (the global one) + +-- **Selection** ([if](http://www.lua.org/manual/5.1/manual.html#2.4.4) statement) +-- Both `false` and `nil` are considered false; all other values are considered true +-- (in particular, the number 0 and the empty string are also true). +if hours > 40 then + print("You've had some overtime this week!") +else + print("You have no overtime this week") +end + +-- **for Loop** ([for](http://www.lua.org/manual/5.1/manual.html#2.4.5) statement) +for i = 1,2 do + greeting = i == 1 and 'Hello' or 'Bye' + print(greeting, name) +end + +-- **while Loop** ([while](http://www.lua.org/manual/5.1/manual.html#2.4.4) statement) +print("Enter a number; enter 0 to end the sequence") +local num = tonumber(io.read("*n")) +while num ~= 0 do + print(num) + num = tonumber(io.read("*n")) +end + +-- [Table](http://www.lua.org/manual/5.1/manual.html#2.5.7) +payByWeek = {320, 540, 340, 880} +payByPerson = {John = 320, Mary = 340, Bob = 880, Rob = 860} + +-- iterate over array part +for week, pay in ipairs(payByWeek) do + print("Paid "..pay.." in week "..week) +end + +-- iterate over hash part (no guaranteed order) +for person, pay in pairs(payByPerson) do + print("Paid "..pay.." to "..person) +end + +-- test if a key is present in the table +-- `payByPerson['John']` is the same as `payByPerson.John` +if payByPerson['John'] then + print('John has been paid this week') +end + +-- getting random values +local M, N = 10, 20 +math.random() -- returns a real value in the range [0, 1) +math.random(M) -- returns an integer value in the range [1, M] +math.random(M, N) -- returns an integer value in the range [M, N] +math.randomseed(os.time()) -- "seeds" pseudo-random generator +-- using the same seed will produce the same sequence \ No newline at end of file