Függvényeket megadhatunk globális vagy akár beágyazhatunk más függvények törzsébe. Az fn kulcsszó vezeti be, van neve és paraméterlistája, ebben név : típus párok vannak, „->” után visszatérési érték és törzs:
fnA visszatérési értéket a függvény törzsében két -féle képpen adhatjuk meg: return kulcsszó után, ezt követi egy kifejezés vagy a blokk utolsó kifejezése után nem teszünk „;”-t és akkor ennek az értéke lesz a visszatérési érték. Azok a függvények amelyeknek nincs visszatérési értéke nil-el („()”) térnek vissza.
Továbbá támogatja a mintaillesztést, pl.: egy tuple első értékét adja vissza:
Függvények túlterhelése trait-ekkel lehetséges:
A nevesített függvények esetében a függvény törzsében nem lehet használni azon kívül megadott változókat. A Rust erre is ad lehetőséget, ezeket closure nevezzük, hozzáférhetnek a legközelebbi őt tartalmazó hatáskör változtozóihoz.
A closure-ket a paraméterlistában két „|” közé kell írni. A típust közé nem kell általában kiírni mert a fordító ki tudja következtetni.
Több fajta lezárt van, különböző szabályokkal. A leggyakoribb a „stack closure”, két „|” között, közvetlenül tud hozzáférni a külső változókhoz.
Ezek nagyon hatékonyak mivel, a környezetük allokálva van a call stack-en és a lokális változókra referenciákon keresztül hivatkoznak. Sosem élnek tovább, mint a változók amire hivatkoznak. Kizárólag argumentum pozícióban használhatóak, nem tárolhatóak adatszerkezetekben és nem lehet függvény visszatérési értéke.
A lezártaknak bármilyen típust átlehet adni, kivétel „||”. Vagyis, ha írunk egy magasabb rendű függvényt ami csak hívja a függvény argomentumait, és nem csinál mást velük, akkor akkor is kell deklarálni egy „||” típusú argomentumot. Ekkor a hívó tetszőleges típussal tudja hívni.
Hasonlóan a függvényekhez, egy speciális paraméterrel kezdődnek ez a „self” és fogadó objektumnak megfelelő típusú, arra mutat, hasonlóan, mint C++-ban a this. Az „impl” kulcsszóval kezdődik a metódus implementációja. Enum-ok és struct-okhoz adhatunk metódusokat. Egy objektumon a . operátorral lehet meghívni, pl.: a.draw(). Például:
Az, hogy milyen típusként használjuk a self paramétert a metódustól függ, írhatjuk self, &self, @self vagy ~self. Így a hivó felelőssége, hogy megfelelő mutatóra hívja meg a metódust.