宏
@Actor 宏
public macro Actor(input: Tokens): Tokens
public macro Actor(options: Tokens, input: Tokens): Tokens
功能:把一个 class 类变成一个 actor。
说明:
@Actor 宏的使用有以下限制:
- 它只能用于类;
- 被标注的类不能是 abstract/open/sealed。
违反这些限制会导致宏展开时出现编译错误。
选项:Actor 宏接受以 opt1: value1, opt2: value2 形式的选项列表。例如,
@Actor[option1: value1, option2: value2]
目前可用的选项只有 enableReceiverPriority: value - 指定是否启用接收函数之间的优先级。提供的值必须是 boolean 的字面量,即 true 或 false。如果没有指定此选项,默认为 false。
所有选项只能出现一次,否则在宏展开期间将抛出错误。
示例:
import stdx.actors.*
import stdx.actors.macros.*
@Actor
public class Counter <: ToString {
private var cnt: Int64 = 0
public func toString(): String {
"This is a counter."
}
}
main() {
let counter: Counter = Counter()
println(counter)
}
运行结果:
This is a counter.
@Receiver 宏
public macro Receiver(input: Tokens): Tokens
public macro Receiver(options: Tokens, input: Tokens): Tokens
功能:把一个成员函数变成接收函数。
说明:
@Receiver 宏的使用有以下限制:
违反这些限制会导致宏展开时出现编译错误。
选项:Receiver 宏接受以 opt1: value1, opt2: value2 形式的选项列表。例如,
@Receiver[option1: value1, option2: value2]
目前可用的选项只有 priority: value - 指定接收函数的默认优先级级别。提供的值必须是介于 1 到 10 之间的整数字面量;否则,在宏展开期间将抛出错误。此选项仅在外层 @Actor 宏具有 enableReceiverPriority: true 选项时才可用。
所有选项只能出现一次,否则在宏展开期间将抛出错误。
示例:
import stdx.actors.*
import stdx.actors.macros.*
@Actor
public class Counter <: ToString {
private var cnt: Int64 = 0
@Receiver
public func inc(): Unit {
cnt++
}
@Receiver
public func getCnt(): Int64 {
cnt
}
public func toString(): String {
"This is a counter: cnt = ${getCnt().get()}."
}
}
main() {
let counter: Counter = Counter()
counter.inc()
counter.inc()
println(counter)
}
运行结果:
This is a counter: cnt = 2.