// Copyright 2014 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ fn call_it(f: F) where F : FnOnce(String) -> String { println!("{}", f("Fred".to_string())) } fn call_a_thunk(f: F) where F: FnOnce() { f(); } fn call_this(f: F) where F: FnOnce(&str) + Send { f("Hello!"); } fn call_bare(f: fn(&str)) { f("Hello world!") } fn call_bare_again(f: extern "Rust" fn(&str)) { f("Goodbye world!") } pub fn main() { // Procs let greeting = "Hello ".to_string(); call_it(|s| { format!("{}{}", greeting, s) }); let greeting = "Goodbye ".to_string(); call_it(|s| format!("{}{}", greeting, s)); let greeting = "How's life, ".to_string(); call_it(|s: String| -> String { format!("{}{}", greeting, s) }); // Closures call_a_thunk(|| println!("Hello world!")); call_this(|s| println!("{}", s)); // External functions fn foo(s: &str) {} call_bare(foo); call_bare_again(foo); }