7.7.2 访问结果值
通过信号发送的消息是异步的,因此没有返回值。如果需要一个逻辑返回值,那么它必须被建模为另一个单独的信号消息。但对于一个操作调用来说是有一个潜在的返回值的。如果操作已经返回(对于异步调用则不必如此)的话该值是可用的,而且,在定义时已经规定了返回值类型。OclMessage的标准操作result()包含了所调用操作的返回值。如果getMoney(...)是Company 上一个返回布尔值的操作,比如:Company::getMoney(amount: Integer): Boolean,我们可以写:
context Person::giveSalary(amount: Integer)
post: let message: OclMessage=company^getMoney(amount) in
message.hasReturned() --getMoney已经被发送和返回
and
message.result()=true --getMoney调用返回真
在上面的例子中,我们还可以从OclMessages的集合中访问返回值的集合。如果message.hasReturned()为假,那么message.result()是无效的。