Eiffel: как получить тип определенного операнда процедуры - PullRequest
0 голосов
/ 20 ноября 2018

Как я вижу в отладчике, можно получить операнды и имя процедуры, есть ли способ получить его?

  • PROCEDURE => Операнды возвращают отделяемый, который, кажется, возвращаетоперанды, только когда они были установлены в агенте
  • Должен ли я проходить через какой-либо класс REFLECTOR, потому что класс PROCEDURE не имеет этой функции и в этом случае почему?

enter image description here

Кажется, что у estudio есть доступ к информации, которой нет у клиента ROUTINE, почему он является привилегированным?он обманывает?

1 Ответ

0 голосов
/ 03 декабря 2018

Следующий код демонстрирует, как получить информацию о типах открытых аргументов рутинного объекта:

        p: ROUTINE -- Routine object.
        t: TYPE [detachable ANY] -- Current open argument type.
    do
        p := agent (i: INTEGER; s: STRING)
            do
            end
        across
            1 |..| p.open_count as i
        loop
            t := p.generating_type.generic_parameter_type (1).generic_parameter_type (i.item)
            io.put_string (t.name)
            io.put_new_line
        end

Для меня приведенный выше код выводит

INTEGER_32
!STRING_8

Комментарии:

  1. p.open_count дает общее количество открытых аргументов.
  2. p.generating_type возвращает тип объекта-подпрограммы.
  3. p.generating_type.generic_parameter_type (1) возвращает тип открытых аргументовобъект кортежа.
  4. Последний вызов generating_type возвращает тип открытого аргумента с индексом i.item.
...