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!

Reply via email to