Lua - Как мне использовать функцию из другого скрипта? - PullRequest
3 голосов
/ 10 января 2012

Я оглядывался по сторонам и не смог найти ничего подходящего для меня.Я начинаю изучать Lua, и для начала я делаю простой калькулятор.Я смог перенести каждую отдельную операцию в отдельные программы, но когда я пытаюсь объединить их, я просто не могу заставить ее работать.Мой скрипт в том виде, в котором он есть сейчас,

require "io"
require "operations.lua"

do
print ("Please enter the first number in your problem.")
x = io.read()
print ("Please enter the second number in your problem.")
y = io.read()
print ("Please choose the operation you wish to perform.")
print ("Use 1 for addition, 2 for subtraction, 3 for multiplication, and 4 for division.")
op = io.read()
op = 1 then
    function addition
op = 2 then
    function subtraction
op = 3 then
    function multiplication
op = 4 then
    function division
print (answer)
io.read()
end

, а мой скрипт operations.lua -

function addition
    return answer = x+y
end

function subtraction
    return answer = x-y
end

function multiplication
    return answer = x*y
end

function division
    return answer = x/y
end

. Я пытался использовать

if op = 1 then
      answer = x+y
      print(answer)
if op = 2 then
      answer = x-y
      print(answer)

, и я сделал это.завершение каждой операции.Но это не работает.Я даже не могу получить код ошибки, который он возвращает, потому что он закрывается так быстро.Что мне делать?

Ответы [ 3 ]

1 голос
/ 10 января 2012

В вашем примере внесите следующие изменения: Вы require operations.lua без расширения.Включите параметры в определения функций operations.Возвратите выражение операции напрямую по сравнению с возвратом оператора, подобного answer = x+y.

Все вместе:

Код для операций .lua

function addition(x,y)
    return x + y
end

--more functions go here...

function division(x,y)
    return x / y
end

Код для вашего Lua-скрипта хостинга:

require "operations"

result = addition(5,7)
print(result)

result = division(9,3)
print(result)

Как только вы начнете работать, попробуйте заново добавить свою логику io.

Имейте в виду, что после ее кодирования ваши функции будут определены глобально.Чтобы не загрязнять глобальную таблицу, рассмотрите возможность определения operation.lua как модуля.Взгляните на lua-users.org Учебное пособие по модулям .

1 голос
/ 10 января 2012

Правильный if-then-else синтаксис:

if op==1 then
   answer = a+b
elseif op==2 then
   answer = a*b
end
print(answer)

После: проверьте правильный синтаксис объявления функции.

После: return answer=x+y неверно. Если вы хотите установить значение answer, установите без return. Если вы хотите вернуть сумму, пожалуйста, используйте return x+y.

И я думаю, вы должны проверить Программирование на Lua .

0 голосов
/ 10 января 2012

Прежде всего, научитесь использовать командную строку, чтобы вы могли видеть ошибки (в Windows это будет cmd.exe).

Во-вторых, измените вторую строку на require("operations"). То, как вы это сделали, интерпретатор ожидает каталог operations с базовым сценарием lua.lua.

...