Нужна помощь в объединении функций в стопку или цепочку

#lua

Вопрос:

Мне интересно, как я могу заставить что-то подобное работать:

 Test ={}

function Test:returnNumber5 ()
return 5 
end

function Test:add5( num ) 
return num   5 
end


function randumFunction()
local num = Test:returnNumber5():add5() 
if num == 10 then

print(num)

end 
end
 

Я ищу, чтобы сложить или связать вместе код:

Тест:returnNumber5():add5():add5():add5()

Я не понимаю, как настроить длинные цепочки функций. Я понимаю, как вызывать их и заставлять их делать то, что я хочу, при моддинге других игр, но не знаю, почему это не работает для моей игры. Я ввел приведенный выше тестовый код в свою игру, и он просто выводит мою игру из строя без каких-либо подробностей, используя фреймворк Love2D

Пожалуйста, помогите, если сможете, спасибо!

Комментарии:

1. Непонятно, о чем вы спрашиваете. Пожалуйста, отредактируйте свой вопрос, чтобы включить какой-то реальный код, который вы пробовали, а не псевдокод. Также покажите нам свой фактический результат и результат, который вы пытаетесь получить.

2. Я отредактировал. Извините, трудно сказать, что я ищу

3. Когда я говорю «фактический код», я имею в виду код, который мы можем скопировать, вставить и запустить сами. Ключевые слова Lua не пишутся с заглавной буквы. «Больше кода» следует прокомментировать. И отформатируйте код с помощью значка {}. Мы все еще не знаем, что вы пытаетесь сделать, связывая функции. Добавьте несколько print звонков и сообщите нам, какие результаты вы должны получить.

4. А ну понятно. Я здесь новенькая. Не знаю, что вы все ищете. Буду повторно редактировать спасибо

5. Это лучшее, что я могу сделать со своим телефоном прямо сейчас, и текстовый редактор здесь странно работать с lol, я скоро освоюсь с этим, надеюсь

Ответ №1:

Прежде всего, вам нужен конструктор для создания объекта:

 Test = {}

function Test:new()
  local o = {}
  setmetatable(o, self)
  self.__index = self
  return o
end
 

Второе-вернуть себя, если вы хотите использовать форму object:doSomething():doSomethingElse() .

 Test = {}

function Test:new()
  local o = {}
  setmetatable(o, self)
  self.__index = self
  return o
end

function Test:setNumber5()
  self.num = 5
  return self
end

function Test:add5() 
  self.num = self.num   5
  return self
end

function Test:value() 
  return self.num
end


function randumFunction()
  local num = Test:new():setNumber5():add5():value()
  
  if num == 10 then
    print(num)
  end 
end
 

Комментарии:

1. Я знал, что это как-то связано с метаметодами! Лол спасибо за ответ

2. Пожалуйста. Участник, которого вы можете нажать , если считаете, что ответ полезен, и нажмите «Ответить», если это решит вашу проблему.

3. Хм, не вижу никакого знака» «. Кроме того, я не думаю, что смогу пока дать ответ. У меня на счету недостаточно очков