メインコンテンツへスキップ

@babel/plugin-proposal-partial-application

(例は提案資料から抜粋)

JavaScript
function add(x, y) { return x + y; }

const addOne = add(1, ?); // apply from the left
addOne(2); // 3

const addTen = add(?, 10); // apply from the right
addTen(2); // 12

let newScore = player.score
|> add(7, ?)
|> clamp(0, 100, ?); // shallow stack, the pipe to `clamp` is the same frame as the pipe to `add`.

有効な使用方法

JavaScript
f(x, ?)           // partial application from left
f(?, x) // partial application from right
f(?, x, ?) // partial application for any arg
o.f(x, ?) // partial application from left
o.f(?, x) // partial application from right
o.f(?, x, ?) // partial application for any arg
super.f(?) // partial application allowed for call on |SuperProperty|

無効な使用方法

JavaScript
f(x + ?)          // `?` not in top-level Arguments of call
x + ? // `?` not in top-level Arguments of call
?.f() // `?` not in top-level Arguments of call
new f(?) // `?` not supported in `new`
super(?) // `?` not supported in |SuperCall|

インストール

npm install --save-dev @babel/plugin-proposal-partial-application

使用方法

babel.config.json
{
"plugins": ["@babel/plugin-proposal-partial-application"]
}

CLI 経由

シェル
babel --plugins @babel/plugin-proposal-partial-application script.js

Node API 経由

JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-proposal-partial-application"],
});

リファレンス