2014-11-01 31 views
12

Tam w dowolny sposób w Rust, aby utworzyć lokalną funkcję , którą można nazwać więcej niż raz. Sposób, zrobiłbym to w Pythonie jest:Lokalna funkcja w Rust

def method1(): 
    def inner_method1(): 
    print("Hello") 

    inner_method1() 
    inner_method1() 

Odpowiedz

17

Tak można zdefiniować funkcje wewnątrz funkcji:

fn method1() { 
    fn inner_method1() { 
     println!("Hello"); 
    } 

    inner_method1(); 
    inner_method1(); 
} 

Jednak funkcje wewnętrzne nie mają dostępu do zakresu zewnętrznej. Są to zwykłe funkcje, które nie są dostępne spoza funkcji. Można jednak przekazać zmienne do funkcji jako argumenty. Aby zdefiniować funkcję z konkretną sygnaturą, która może nadal uzyskiwać dostęp do zmiennych z zewnętrznego zakresu, należy użyć zamknięć.

+0

@ChrisMorgan, to nie ma z tym nic wspólnego. –

+2

@AlexanderSupertramp: wydajesz się zdeterminowany, aby interpretować wszelkie komentarze, które robię negatywnie, kiedy nigdy nie ma powodu, aby to robić. Byłbym wdzięczny, gdybyś przestał to robić. W tym przypadku wskazuję tylko, że można uniknąć użycia zamknięć, przekazując zmienne, które zostałyby zamknięte w funkcji jako argumenty. Nic złego w tym, prawda? –

+0

@ChrisMorgan, Oh, chodź - złożyłem proste oświadczenie, które jest całkowicie prawdziwe! Moje pytanie wyraźnie mówi - "funkcje lokalne", które nie mają nic wspólnego z tym, co zaproponowaliście. –