Jak napisano, utworzyłeś funkcję przypisaną do a
, która nie przyjmuje żadnych argumentów i niczego nie zwraca; ma efekt uboczny drukowania "cześć".
Następnie utworzyć tabelę zapisaną w b
, który ma trzy wyrażeń: b[1]
i b[2]
są numery, a b[3]
jest wynikiem wywołania funkcji przechowywanych w a
, które zostaną skorygowane przez zwykłych reguł do pojedynczej wartości przez napawanie zgodnie z wymaganiami z nil
. Tak więc b
będzie tabelą zawierającą tylko dwa wpisy, obie liczby. Jednak wywołano a()
podczas tworzenia wartości b
, która wydrukowała "witaj".
Na koniec należy zadzwonić pod numer print(b[1])
, który wypisze oczekiwany numer.
To w pełni wyjaśnia wydajność, którą zobaczyłeś. Ponieważ prawdopodobnie nie jest to oczekiwana wydajność, możesz to naprawić na kilka sposobów.
Na przykład zadeklaruj a
, aby zamiast "print" zwrócił "hello".
a = function() return "hello" end
Następnie nazywając ją przy konstruowaniu tabeli przechowywane w b
nic nie drukuje, a b
dostanie trzeci element, napis „Hello”.
Alternatywnie można zapisać funkcję tak, jak zapisano w b
, pozostawiając poza nawiasami, które spowodowały jej wywołanie.
b = {125, 116, a}
Ponownie, b
przechowuje tabelę złożoną z trzech elementów. W tym przypadku, b[3]
jest funkcją, która drukuje "cześć".
Czynności, które należy wykonać, zależą wyłącznie od zamierzonego zastosowania wartości przechowywanych w tabeli pod numerem b
.