Usa eval
!
Ispirato dalla risposta di Luis Mendo qui .
Nella maggior parte dei casi, le funzioni anonime sono più brevi della creazione di uno script che richiede una o più chiamate input('')
. Il rovescio della medaglia è che i cicli e le modifiche variabili (come lo scambio di due elementi in una matrice) sono impossibili e ingombranti.
Con eval
, puoi recuperare l'input come fai con una normale funzione anonima ed eseguire lo script come fai con uno script normale:
Considera questo :
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
Rispetto a questo:
@(c,N,A)eval('for C=c,A(flip(k))=A(k=[x=find(A==C),N^2+1-x]);end,A')
Il codice è identico, ma la sezione di input è molto più breve.
Questo può anche essere usato per modificare variabili di input, come questo (merito a Luis Mendo per questo!):
f(x)eval('x([1,4])=x([4,1])`;