Фокус-покус - Лотус-Нотус скрип-т

Тема в разделе "Lotus - Программирование", создана пользователем lmike, 27 янв 2010.

Наш партнер Genesis Hackspace
  1. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.169
    Симпатии:
    306
    делай раз - создаем либу (test.lib) с декларой:
    Код (Text):
    Class TestObj
    Private testList List As String
    Property Set ListStr(xKey) As String
    testList(xKey)=ListStr
    End Property
    Property Get FullList As Variant
    FullList=testList
    End Property
    End Class
    делай два - агент:
    Код (Text):
    Option Public
    Option Declare
    Use "test.lib"
    Sub Initialize
    Dim test As New TestObj()
    test.ListStr("1")="One"
    test.ListStr("2")="Two"
    test.ListStr("3")="Three"
    Forall t In test.FullList
    Print t
    End Forall
    End Sub
    делай три - пущаем агент
    получаем... - несовпадение типов

    каментим Use...
    суваем в деклару агента класс, из библы
    сохраняем-пущаем - всё проходит!

    оттакавот опа
    Variant никак не кастится, ежели лист тяним из либы
     
  2. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.435
    Симпатии:
    31
    Забавный, этот ваш лотус..
     
  3. nvyush

    nvyush Well-Known Member
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Если в агенте написать так:
    Код (Text):
    Sub Initialize
    Dim test As New TestObj()
    test.ListStr("1")="One"
    test.ListStr("2")="Two"
    test.ListStr("3")="Three"
    Dim lst As Variant
    lst = test.FullList
    Forall t In lst
    Print t
    End Forall
    End Sub
    то с либой работает. Прикольный глюк.
     
  4. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.095
    Симпатии:
    19
    lmike
    думаю дело тут таки в ForAll
    я тоже ни раз замечал что переменный в нем конвертятся в "хитрый вариант"
    просто пример:
    имеем строковый массив a(0..10)
    Код (Text):
    forall b in a
    call TestSub(B) ' - если в этой процедуре указать на прийом жестко строковую переменную, то уже в процессе компиляции мы получаем ошибку
    и писать нам приходится вот так:
    Код (Text):
    call TestSub( (cstr(B) )
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.169
    Симпатии:
    306
    я не против хитрой конвертации, я против зависимости от положения звёзд.../кода :lol:
    forall удобен как тип цикла
    с явным приведением - я сталкивался, но - це другой случАй :)
     
  6. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.445
    Симпатии:
    7
    нда, вот если в стартовом примере поменять принт на
    Print t & "1"
    то выведет 3 раза 1 :lol:

    а если поизвращаться, то еще и так работает:
    Код (Text):
    Forall t In test.FullList
    Print test.FullList(Listtag(t))
    End Forall
    (*прошу не бить ногами за такой изврат*)
     
  7. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.169
    Симпатии:
    306
    подобный фокус получим и с бриджом LS2J
    ежели в классе обратимся к полям класса java (public final int myConst=1;)
    то, в случае вынесения LS рапера в библиотеку, поимеем невозможность получения Java Field
    а реализация класса в агенте (по месту примения) такой ошибки не даст
    для желающих поиграться - nsftools, LS2J экзампелы (прогрессбар)...
    выносим класс агента в библиотеку - получаем ошибку
     
  8. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    620
    Симпатии:
    5
    а по-моему это нормально, раз кодер "что угодно" пихает в вариант, значит в месте использования этого "чего угодно" он знает, что "оно" есть, и использует приведение к нужному типу..

    и что должна выводить такая конструкция ?
    Код (Text):
    Forall t In lst
    Print t
    End Forall
    тег приведенный к строке или значение элемента тега ?

    лучшим вариантом в работе со списками я считаю создание сначала некоторого типа, а затем списка этого типа, тогда вообще никаких проблем нет..

    Код (Text):
    Type ABuser
    fio As String
    db As String
    End Type

    Dim usersAB List As ABuser

    If Iselement ( usersAB( lname)) Then
    usersAB( lname).fio = usersAB( lname).fio & DELIM & altName
    usersAB( lname).db = usersAB( lname).db & DELIM & server & DELIMDB & dbpath
    Else
    usersAB( lname).fio = altName
    usersAB( lname).db = server & DELIMDB & dbpath
    End If

    forall note in usersAB 
    print note.fio, note.db
    endforall
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.169
    Симпатии:
    306
    а Вы попробуйте...
    или невнимательно прочитали? :(
    там именно - низя привести ни к какому типу!
    только вокэраунд как у nvy

    это не рабочий код - это демонстрация и от того что лежит в листе не зависит
    именно получение листа - как референса (а иначе придется итерировать с копированием) важно в этом примере
     
  10. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    620
    Симпатии:
    5
    да, понял что там написано.. список в явном виде по ссылке не передается..
    с другой стороны зачем его пихать в класс, если его обратно нужно вернуть (хотя, конечно, всякое бывает) ?
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.169
    Симпатии:
    306
    ну пихают в класс - чтобы клас его инициализировал и работал с ним..., а результат обработки - как массив
    и глобальным его делать не хоца
    разве не приходилось из ф-ций возвращать массивы? :(
     
  12. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    620
    Симпатии:
    5
    так то массивы.. обычно это уже чистые выжимки, а у вас задача иная..
    что-то вроде - кинул начальных параметров, получил мегасписок, кинул параметров в функцию, получил выборку, другой набор параметров - другая выборка..
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.169
    Симпатии:
    306
    нет - задача не иная :(
    повторюсь - это концепт
    хэши - суть массивы, то что его в LS обозвали List, не влияет на содержимое
    допустим нужен агрегатор по ключу (суммы, счетчики, контектация строк...) - хэш самое оно
    а затем сортануть ключи (в др. массиве), и вывести резалт
     
Загрузка...
Похожие Темы - Фокус покус Лотус
  1. Artur1987
    Ответов:
    0
    Просмотров:
    1.051
  2. Реник
    Ответов:
    1
    Просмотров:
    1.252
  3. 123456789igor
    Ответов:
    1
    Просмотров:
    1.492
  4. Gandliar
    Ответов:
    1
    Просмотров:
    1.266
  5. Mitya
    Ответов:
    10
    Просмотров:
    2.738

Поделиться этой страницей