Concrete subclasses must implements the apply
method.
This interface helps to manipulate function-like objects.
The main usage it as a transformation; that takes an argument and produce a result.
See map
for example.
Another usage is as a predicate, with Function[E, Bool]
.
See Iterator::select
for example.
Function with more than one argument can be reified with some uncurification.
Eg. Function[ARG1, Function[ARG2, RES]]
.
NOTE: Nit is not a functionnal language, this class is a very basic way to simulate the reification of a simple function.
pipeline :: Function :: defaultinit
core :: Object :: class_factory
Implementation used byget_class
to create the specific class.
pipeline :: Function :: defaultinit
core :: Object :: defaultinit
core :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
core :: Object :: output_class_name
Display class name on stdout (debug only).
# Interface that reify a function.
# Concrete subclasses must implements the `apply` method.
#
# This interface helps to manipulate function-like objects.
#
# The main usage it as a transformation; that takes an argument and produce a result.
# See `map` for example.
#
# Another usage is as a predicate, with `Function[E, Bool]`.
# See `Iterator::select` for example.
#
# Function with more than one argument can be reified with some uncurification.
# Eg. `Function[ARG1, Function[ARG2, RES]]`.
#
# NOTE: Nit is not a functionnal language, this class is a very basic way to
# simulate the reification of a simple function.
interface Function[FROM, TO]
# How an element is mapped to another one.
fun apply(e: FROM): TO is abstract
# Filter: produce an iterator which each element is transformed.
#
# var i = [1,2,3].iterator
# assert fun_to_s.map(i).to_a == ["1", "2", "3"]
#
# Note: because there is no generic method in Nit (yet?),
# there is no way to have a better API.
# eg. with the Iterator as receiver and the function as argument.
# (see `Iterator::select`)
fun map(i: Iterator[FROM]): Iterator[TO]
do
return new PipeMap[FROM, TO](i, self)
end
end
lib/pipeline/pipeline.nit:292,1--325,3