Użyj eval
!
Zainspirowany odpowiedzią Luisa Mendo tutaj .
Funkcje anonimowe są w większości przypadków krótsze niż tworzenie skryptu, który wymaga jednego lub więcej wywołań input('')
. Minusem jest to, że pętle i modyfikacje zmiennych (takie jak zamiana dwóch elementów w macierzy) są niemożliwe .
Za pomocą eval
można pobrać dane wejściowe, tak jak w przypadku zwykłej anonimowej funkcji, i uruchomić skrypt, tak jak w przypadku zwykłego skryptu:
Rozważ to :
c=(i=@input)('');N=i('');A=i('');for C=c,A(flip(k))=A(k=[x=find(A==C),N^2+1-x]);end,A
W porównaniu z tym:
@(c,N,A)eval('for C=c,A(flip(k))=A(k=[x=find(A==C),N^2+1-x]);end,A')
Kod jest identyczny, ale sekcja wejściowa jest znacznie krótsza.
Można to również wykorzystać do modyfikacji zmiennych wejściowych, takich jak to (za to dziękuję Luisowi Mendo !):
f(x)eval('x([1,4])=x([4,1])`;