在本章中,我们将介绍 Cairo 中的函数,包括可见性不同的external
和view
函数。
函数
Cairo 与 Rust 类似,函数使用 fn
关键字声明。参数类型像声明变量一样需要标明,当函数返回一个值时,必须在箭头 ->
之后指定返回类型。
以下是 sum_two()
函数的示例。它接受两个 u128
类型的参数,并返回一个 u128
值。
在类似 Rust 的语言中,函数的返回值由其函数体中的最后一个表达式确定。虽然你可以使用 return
关键字提前退出函数并指定一个值,但大多数函数会隐式返回最后一个表达式。下面的 sum_two_expression()
函数与 sum_two()
函数的行为完全相同。请注意,表达式不以分号 ;
结尾。
可见性
默认情况下,函数是私有的,这意味着它们只能在内部访问。但是,你可以使用#[external(0)]
修饰器声明公共函数。
View
参数中包含self: @ContractState
的函数是view
函数。它们可以读取状态变量(self.var_name.read()
),但不能更改合约的状态,例如更新状态变量或释放事件。
External
参数中包含self: @ContractState
的函数也可以被外部访问。与 view
函数不同,它们可以修改合约的状态(使用self.var_name.write(new_value)
),例如更新状态变量或释放事件。
总结
在本章中,我们探讨了Cairo中的函数。虽然函数默认为私有,但你可以使用#[external(v0)]
修饰器使它们具有外部访问性。