calc_wrap
Enhanced version of calc with currying support and flexible argument order.
Key Differences from calc
| Feature | calc | calc_wrap |
|---|---|---|
| Error handling | throws | returns '-' by default |
| Currying | ❌ | ✅ |
| Argument order | fixed | flexible |
| Pre-configuration | ❌ | ✅ |
Usage Patterns
Direct Call
javascript
import { calc_wrap } from "a-calc";
calc_wrap("1 + 2"); // '3'
calc_wrap("a + b", { a: 1, b: 2 }); // '3'Expression First (Currying)
javascript
const addAB = calc_wrap("a + b");
addAB({ a: 1, b: 2 }); // '3'
addAB({ a: 10, b: 20 }); // '30'
const calcPrice = calc_wrap("price * qty | =2,");
calcPrice({ price: 99.9, qty: 1 }); // '99.90'
calcPrice({ price: 99.9, qty: 2 }); // '199.80'Data First (Currying)
javascript
const withData = calc_wrap({ a: 10, b: 20 });
withData("a + b"); // '30'
withData("a * b"); // '200'
withData("a - b"); // '-10'Pre-configuration
javascript
const calcMoney = calc_wrap({
_fmt: "=2,",
_unit: true,
_error: "-",
});
calcMoney("100$ + 50$"); // '150.00$'Real-World Examples
Table Data Processing
javascript
const data = [
{ price: 10, qty: 2 },
{ price: 20, qty: 3 },
{ price: 15, qty: 1 },
];
const calcTotal = calc_wrap("price * qty | =2");
data.map((item) => calcTotal(item));
// ['20.00', '60.00', '15.00']Reusable Business Logic
javascript
const calcDiscount = calc_wrap("original * (1 - rate) | ~5=2");
const calcTax = calc_wrap("amount * taxRate | ~5=2");
const discounted = calcDiscount({ original: 100, rate: 0.2 }); // '80.00'
const tax = calcTax({ amount: 80, taxRate: 0.1 }); // '8.00'