This small package provides an alternative syntax for writing anonymous functions. It allows the use of three types of function arguments within the body of a call to @λ
or @lf
:
- Implicit - each
_
is replaced with a new function argument - Numbered - each
_[n]
is replaced with the nth argument to the function - Named - each
_[name]
is replaced with an argument namedname
, and they occur in the function argument list in the same order they appear in the function body.
Note that the three types of arguments cannot be mixed: @λ(_1 + _)
throws an error.
Where supported (e.g. VSCode, Vim, Julia REPL, or Juno), you can type λ
starting with a backward slash followed by the word lambda i.e. \lambda
.
using LambdaFn
@λ(_ + _) # == (x,y) -> x+y
@λ(_a*_b + _a) # == (a,b) -> a*b + a
@λ(_2 - _1) # == (_1,_2) -> _2 - _1
@λ(_1 - _3) # == (_1,_2,_3) -> _1 - _3
filter(@λ(_.value > 10),data) # == filter(x -> x.value > 10,data)
1:10 |> @λ(filter(@λ(_ > 3),_)) == 4:10
This macro resembles the syntax in this proposal, and I basically made this package because I got tired of waiting for that feature. The macro is a little more verbose than the proposed syntax change to julia, but I've grown to like the extra options it allows. I also like that it still has an explicit boundary around the body of the anonymous function, an issue that really complicates use of a bare _
as an anonymous function argument.
- Underscore.jl lets you use a single macro applied over multiple functions and use the
_
(or_1
) syntax for anonymous functions. I think I like it better than this package. - LightQuery.jl has the
@_
macro, which I know less about. - Lazy.jl has
@>
,@>>
and@as
.