2013-10-05 11 views

Odpowiedz

5

Usuwanie nawiasy powinna zmusić go do pracy: (live @ codepad.org):

a = function() 
    print("hello") 
end 

--[[ Previous code: 
    'a()' will execute the function 'a' and will evaluate to its return value 
    b = {125, 116, a()} 
]] 

-- a is now a reference to the function (you could execute it by using: 'b[3]()') 
b = {125, 116, a} 

print(b[1]) 

Inaczej jesteś napełniania tabelę z trzech wartości:

  • 125,

  • i wartość zwracana przez funkcję wywołanie "a()".

6

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.

Powiązane problemy