Files
wren/doc/site/core/fn.markdown
T
Bob Nystrom 58e4d26648 "IO" -> "System".
Get rid of the separate opt-in IO class and replace it with a core
System class.

- Remove wren_io.c, wren_io.h, and io.wren.
- Remove the flags that disable it.
- Remove the overloads for print() with different arity. (It was an
  experiment, but I don't think it's that useful.)
- Remove IO.read(). That will reappear using libuv in the CLI at some
  point.
- Remove IO.time. Doesn't seem to have been used.
- Update all of the tests, docs, etc.

I'm sorry for all the breakage this causes, but I think "System" is a
better name for this class (it makes it natural to add things like
"System.gc()") and frees up "IO" for referring to the CLI's IO module.
2015-09-15 07:46:09 -07:00

1.2 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 {
  System.print("The body")
}

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

Methods

arity

The number of arguments the function requires.

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

call(args...)

Invokes the function with the given arguments.

:::dart
var fn = Fn.new { |arg|
  System.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.