Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
128 views
in Technique[技术] by (71.8m points)

eiffel - referencing typed element of tuple

Discovering late (used to define classes instead) TUPLES and looking through the documentation I was wondering if there is a mecanism to get the right type of a given TUPLE. The goal is both anchoring its types and avoid having to test its type before getting an item. Is there a language mecanism?

I also found few documentation about them, maybe I'm not looking at the right place.

For the following code I'd like to tell like tuple_items.types[1] and 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
question from:https://stackoverflow.com/questions/65844713/referencing-typed-element-of-tuple

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

A named tuple enables accessing the tuple items by name:

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

Then, the feature use_it simplifies to

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

At the moment, tuple item names cannot be used in an anchored type, so there is no way to specify the type of l_first relative to the type of the tuple item. A workaround might be adding an anchor

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

and using it in anchored types, including the tuple declaration:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...