51. 接口
interface 模块实现 [interface] 模式,该模式允许类公开多个接口。
所有函数和符号都在 “interfaces” 模块中,使用 require 来访问它。:
require daslib/interfaces
让我们回顾一下以下示例:
require daslib/interfaces
[interface]
class ITick
def abstract beforeTick : bool
def abstract tick ( dt:float ) : void
def abstract afterTick : void
[interface]
class ILogger
def abstract log ( message : string ) : void
[implements(ITick),implements(ILogger)]
class Foo
def Foo
pass
def ITick`tick ( dt:float )
print("tick {dt}\n")
def ITick`beforeTick
print("beforeTick\n")
return true
def ITick`afterTick
print("afterTick\n")
def ILogger`log ( message : string )
print("log {message}\n")
在上面的示例中,我们定义了两个接口,ITick 和 ILogger。然后我们定义一个类 Foo,它实现了两个接口。类 Foo 必须实现两个接口的所有方法。类 Foo 可以实现其他方法,这些方法不是接口的一部分。
[implements] 属性用于指定类实现的接口。
[interface] 属性用于定义接口。此宏验证接口是否没有任何数据成员,只有方法。
通过模式匹配方法名称,接口方法会自动绑定到特定接口。例如,方法 “tick” 绑定到接口 ITick,因为方法名称以 “ITick’” 开头。方法 “log” 绑定到接口 ILogger,因为方法名称以 “ILogger’” 开头。
此外,还为 Foo 类生成 get’ITick 和 get’ILogger 方法。它们用于获取给定接口的接口对象。interface 对象用于调用接口方法。:
var f = new Foo()
f->get`ITick()->beforeTick()
f->get`ITick()->tick(1.0)
f->get`ITick()->afterTick()
f->get`ILogger()->log("hello")
51.1. 结构宏
- interface
实现 ‘interface’ 宏,该宏验证 class 是否为接口(没有自己的变量)
- implements
实现 ‘implements’ 宏,添加 get`{Interface} 方法以及接口绑定和实现。