trait Curried extends CurriedWithTypeParameters
A marker trait that enables curried varargs.
Given a function call f(a, b, c)
,
when f
is a subtype of Curried,
it should be rewritten to f.applyBegin.applyNext(a).applyNext(b).applyNext(c).applyEnd
.
Optionally, some arguments to a Curried call may be a sequence argument marked as _*
.
Given a function call f(p1, s1: _*, p2)
,
when translating it to the curried form,
the sequence argument will becomes a foldLeft
call.
f.applyBegin .applyNext(p1) .applyNextSeq(s1) .applyNext(p2) .applyEnd
Unlike traditional repeated parameters, which restrict the sequence argument at the last position, sequence arguments in a curried call are allowed at any position.
When a Curried is invoked with some type arguments,
those type arguments will be moved to the applyBegin
method.
Therefore, List[Int](1 to 3: _*)
should be translated to (1 to 3).foldLeft(List.applyBegin[Int])(_.applyNext(_)).applyEnd
.
- Source
- Curried.scala
Fast list builder
class PartiallyAppliedInitializer[A](builder: collection.mutable.Builder[A, List[A]]) { def applyEnd = builder.result def applyNextSeq(seq: Seq[A]) = { builder ++= seq this } def applyNext(a: A) = { builder += a this } } object FastListInitializer extends Curried { def applyBegin[A]:PartiallyAppliedInitializer[A] = new PartiallyAppliedInitializer(List.newBuilder[A]) } FastListInitializer(0, 4) should be(List(0, 4)) FastListInitializer[Int](0, 100 to 103: _*, 1) should be(List(0, 100, 101, 102, 103, 1))
- Alphabetic
- By Inheritance
- Curried
- CurriedWithTypeParameters
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- Any
-
final
def
##(): Int
- Definition Classes
- Any
- def +(other: String): String
- def ->[B](y: B): (Curried, B)
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- Any
- macro def apply(varargs: Any*): Any
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7, A8](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6, A7](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5, A6](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4, A5](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3, A4](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2, A3](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1, A2](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0, A1](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
macro
def
apply[A0](varargs: Any*): Any
- Definition Classes
- CurriedWithTypeParameters
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
- def ensuring(cond: (Curried) ⇒ Boolean, msg: ⇒ Any): Curried
- def ensuring(cond: (Curried) ⇒ Boolean): Curried
- def ensuring(cond: Boolean, msg: ⇒ Any): Curried
- def ensuring(cond: Boolean): Curried
-
def
equals(arg0: Any): Boolean
- Definition Classes
- Any
- def formatted(fmtstr: String): String
-
def
hashCode(): Int
- Definition Classes
- Any
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
def
toString(): String
- Definition Classes
- Any
- def →[B](y: B): (Curried, B)