Chiba Logo CHIBA v0.6.13
CHIBA blog RSS feed
CHIBA / DOCS / LEVEL-1 SPEC

Function Call

这里集中展示 CHIBA level-1 specification,覆盖 core language、control flow、memory、patterns、IR lowering 与 package system 等实现边界。

The docs surface keeps CHIBA level-1 specification pages browsable inside the site, with direct paths into language, control flow, memory, pattern, and lowering rules.

Function Call

语法

function call 使用普通调用语法,把 callee 与实参列表组合。

基本形式为:

f(a, b, c)
obj.m(a, b)

当最后一个实参是 closure literal 时,允许使用 trailing closure sugar:

这里的 trailing closure 是 call-site 专用语法,而不是独立 lambda literal。

f(a) {|x, y|
	body
}

其语义等价于把最后一个参数写成普通 lambda:

f(a, (x: Tx, y: Ty): R => {
	body
})

首发规则只允许一个 trailing closure,且该 trailing closure 只附着到最近的 call expression。

语义

普通函数调用蕴含隐式 reset,因此调用既是值计算,也是局部控制/内存边界。

trailing closure 只是调用语法糖,不引入新的调用语义。

多行 function call 可以在未闭合的参数列表内部跨行继续;这是因为 ( ) 尚未闭合,而不是因为任意空白允许继续解析。

普通函数、closure、method call 在 level-1 中共享同一调用骨架;method call 只是 callee 解析阶段不同,不是另一种求值模型。

参数按书写顺序求值。

Usage

let x = add(1, 2)
let y = f(a) {|v|
	return v + 1
}

注释:普通 call 与 trailing closure call 共享同一调用语义;差别只在 surface sugar。

边界

trailing closure 只允许一个,并附着到最近的 call expression。