You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.4 KiB
46 lines
1.4 KiB
dojo.provide("dojox.lang.functional.util"); |
|
|
|
dojo.require("dojox.lang.functional.lambda"); |
|
|
|
// This module provides helpers: |
|
// - inlining string lambda functions. |
|
|
|
(function(){ |
|
var df = dojox.lang.functional; |
|
|
|
dojo.mixin(df, { |
|
inlineLambda: function(/*String*/ lambda, /*String|Array*/ init, /*Function?*/ add2dict){ |
|
// summary: |
|
// Creates the inlined version of a string lambda. |
|
// lambda: |
|
// The String variable representing the lambda function. |
|
// init: |
|
// Conveys how to initialize parameters. If it is a String, then the apply() method |
|
// would be emulated treating "init" as a list of input parameters. |
|
// It it is an Array, then the call() method is emulated treating array members |
|
// as input parameters. |
|
// add2dict: |
|
// The optional function, which is used to record names of lambda parameters. |
|
// If supplied, this function is called with a name of every parameter. |
|
|
|
var s = df.rawLambda(lambda); |
|
if(add2dict){ |
|
df.forEach(s.args, add2dict); |
|
} |
|
var ap = typeof init == "string", // apply or call? |
|
n = ap ? s.args.length : Math.min(s.args.length, init.length), |
|
a = new Array(4 * n + 4), i, j = 1; |
|
for(i = 0; i < n; ++i){ |
|
a[j++] = s.args[i]; |
|
a[j++] = "="; |
|
a[j++] = ap ? init + "[" + i + "]": init[i]; |
|
a[j++] = ","; |
|
} |
|
a[0] = "("; |
|
a[j++] = "("; |
|
a[j++] = s.body; |
|
a[j] = "))"; |
|
return a.join(""); // String |
|
} |
|
}); |
|
})();
|
|
|