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.
1.2 KiB
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.