Files
wren/doc/site/core/fn.markdown
T
Bob Nystrom e19ff59cce feat: replace new keyword with this constructor syntax and ClassName.new() calls across core library and docs
Replace all uses of the `new` reserved word with explicit `this new()` constructor definitions and `ClassName.new()` instantiation calls in builtin/core.wren. Update all documentation files (classes.markdown, fiber.markdown, fn.markdown, sequence.markdown, error-handling.markdown, expressions.markdown, fibers.markdown, functions.markdown) to reflect the new constructor syntax, removing `new` keyword examples and replacing them with `ClassName.new()` patterns and `this new()` definitions.
2015-07-10 16:18:22 +00:00

1.1 KiB

^title Fn Class ^category core

A first class function—an object that wraps an executable chunk of code. Here is a friendly introduction.

Fn.new(function)

Creates a new function from... function. Of course, function is already a function, so this really just returns the argument. It exists mainly to let you create a "bare" function when you don't want to immediately pass it as a block argument to some other method.

:::dart
var fn = Fn.new {
  IO.print("The body")
}

It is a runtime error if function is not a function.

Methods

arity

The number of arguments the function requires.

:::dart
IO.print(Fn.new {}.arity)             // 0.
IO.print(Fn.new {|a, b, c| a }.arity) // 3.

call(args...)

Invokes the function with the given arguments.

:::dart
var fn = Fn.new { |arg|
  IO.print(arg)
}

fn.call("Hello world") // Prints "Hello world".

It is a runtime error if the number of arguments given is less than the arity of the function. If more arguments are given than the function's arity they are ignored.