Chaining
_.m supports method chaining for a fluent API style.
OO-Wrapper: __()
Section titled “OO-Wrapper: __()”Wraps an object to enable chaining. Call value() to unwrap.
A* lyrics = AA(@[@"I'm", @"a", @"little", @"teapot"]);S* song = __(lyrics) .map(^id(S* word, ...) { return [word uppercaseString]; }) .reduce(^id(S* memo, S* word, ...) { return [memo stringByAppendingFormat:@" %@", word]; }, @"") .value();// => " I'M A LITTLE TEAPOT"Starts a chain. All future method calls return wrapped objects.
A* stooges = AA(@[ OKV({@"name", @"curly"}, {@"age", N.I(25)}), OKV({@"name", @"moe"}, {@"age", N.I(21)}), OKV({@"name", @"larry"}, {@"age", N.I(23)})]);
S* youngest = _.chain(stooges) .sortBy(^id(O* stooge, ...) { return stooge[@"age"]; }) .map(^id(O* stooge, ...) { return [NSString stringWithFormat:@"%@ is %@", stooge[@"name"], stooge[@"age"]]; }) .first() .value();// => "moe is 21"Extracts the value of a wrapped object.
A* result = __(AI(1, 2, 3)).value();// => [1, 2, 3]Chaining Example
Section titled “Chaining Example”// Without chainingA* filtered = _.filter(list, predicate);A* mapped = _.map(filtered, transform);A* sorted = _.sortBy(mapped, comparator);id first = _.first(sorted);
// With chaining - much cleaner!id result = _.chain(list) .filter(predicate) .map(transform) .sortBy(comparator) .first() .value();