Skip to content

Bikeshed impl method extraction

Dretch edited this page Apr 29, 2012 · 1 revision

The idea is to allow a method to be extracted - as a function - from an impl that is scope.

For example, given this currently valid code:

iface hash { fn hash () -> uint; } iface equals { fn equals (other: self) -> bool; } impl of hash for uint { fn hash () -> uint { uint::hash(self) } } impl of equals for uint { fn equals (other: uint) -> bool { self == other } } 

A hashmap constructor function could be defined that takes the hashfn and eqfn from the scope of the function call, so they dont have to be given explicitly:

fn hashmap <K:hash equals copy, V:copy> () -> std::map::hashmap<K, V> { let hashfn = extract hash<K>.hash; // hashfn has type `fn(K) -> uint` let eqfn = extract equals<K>.equals; // eqfn has type `fn(K, K) -> bool` ret std::map::hashmap(hashfn, eqfn); } 

In the above code (which is not currently valid), there is a new keyword called extract. The expression extract path-to-iface<type>.method extracts a method from whichever impl is in scope for iface (if any). The method is extracted as a function with self added as a new argument before the method's existing arguments.

The hashmap function could then be called like:

let map = hashmap(); map.insert(4u, "abc"); 

All Categories:

Clone this wiki locally