引用元组的类型化元素

referencing typed element of tuple

发现较晚(用于定义 类)元组并查看 documentation 我想知道是否有一种机制可以获取给定 TUPLE 的正确类型。 目标是锚定其类型并避免在获取项目之前必须测试其类型。 有没有语言机制?

我也发现了一些关于它们的文档,也许我没有找对地方。

对于下面的代码,我想告诉 like tuple_items.types[1]tuple_items.typed_item (1)

use_it
    do
        if attached {STRING} tuple_items.item (1) as l_tuple_item_1 then
            io.put_string (l_tuple_item_1)
        end
        if attached {DATE} tuple_items.item (1) as l_tuple_item_2 then
            io.put_string (l_tuple_item_2.out)
        end
        - ...
    end

tuple_items: TUPLE[STRING, DATE, INTEGER]
    local
        l_first: STRING -- like tuple_items.first?
    do
        Result := [l_first, create {DATE}.make_now, 1]
    end

命名元组允许按名称访问元组项:

tuple_items: TUPLE [name: STRING; date: DATE; quantity: INTEGER]

然后,特征use_it简化为

        io.put_string (tuple_items.name)
        io.put_string (tuple_items.date.out)

目前,元组项名称不能用于锚定类型,因此无法指定 l_first 相对于元组项类型的类型。解决方法可能是添加锚点

name_anchor: STRING
    require 
        is_callable: False
    do
        check from_precondition: False then end
    end

并在锚定类型中使用它,包括元组声明:

tuple_items: TUPLE [name: like name_anchor; date: DATE; quantity: INTEGER]
    local
        l_first: like name_anchor