On Wed, Apr 11, 2012 at 01:13:17AM +0200, Jonas H. wrote: > Hi everyone, > > does D have any runtime higher-order function facilities? (I'm not > talking about templates.) > > More specifically, is something like this possible? (That's how I'd > do it in Python) > > car_prices = map(Car.get_price, list_of_cars) > > car = new Car > foobar(car.get_price) [...]
You can use delegates. Example: struct Car { int price; int wheels; int get_price() { return price; } int get_wheels() { return wheels; } } int sum(int delegate(Car) dg, Car[] cars) { int sum = 0; foreach (c; cars) { sum += dg(c); } return sum; } void main() { Car[] cars; cars ~= Car(); ... // add some stuff to the list int total_price = sum((Car c) => (c.get_price()), cars); int total_wheels = sum((Car c) => (c.get_wheels()), cars); } T -- IBM = I'll Buy Microsoft!