• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Function

  • Автор темы Автор темы motogarri
  • Дата начала Дата начала
M

motogarri

Функция не возвращает переменные определенного мной Type?

Function GetArray(doc As NotesDocument) As MyType

Ругается. Говорит, что неправильный тип возвращаемого значения.
 
Неа. Когда я на выходе из функции пишу:

Arr = MyArr

Говорит про несоответствие типов. У меня многомерный массив, но не (1, 1, 3), а (2, DocName, Field)
 
Опишите класс
Код:
Function MyFunction(...) As MyClass
Dim ret As New MyClass

Set MyFunction = ret
End Function
 
ну, если писать так:

Код:
Function GetArray(db as NotesDatabase, doc As NotesDocument) As Variant

dim view as notesview
dim doc2 as notesdocument

dim arr() as MyType
Dim k As Integer
Dim i As Integer

Set view = db.GetView("View")
Set dc = view.GetAllDocumentsByKey(doc.ID(0))
Set doc = dc.GetFirstDocument
i = 1
k = dc.Count
Redim arr(1 To k) 
For i = 1 To k
arr(i).Field = doc2.Field(0)
Set doc2 = dc.GetNextDocument(doc2)
Next

GetArray = arr

end Function
 
У меня есть подобная реализация, только переменная собственного типа на входе функции. Проблем нет
 
Лучше Type заменить на Class. Меньше ограничений. Лишний New для создания экземпляра не страшно.
Да, с классом проблем нет, кроме одной. Получается набрать массив объектов класса, но не получается классом сделать сам массив.
А что мешает сделать
dim arr as Variant
и
Redim arr(1 To k) As MyType
и соответствующую обработку результата ф-ции?
Ничего не мешает. Попробую, спасибо)

Вчера полдня просидел над этими типами, и решил этот цикл вообще не выносить в библиотеку. Оставил на потом пока.

Добавлено: А у массивов есть строковое представление, как у полей в документе? По типу:
doc.GetItemValue("Field" & Cstr(i))
Как-то можно такое проделать с полем из моего типа? arr(i).mytype.field1
 
Да, с классом проблем нет, кроме одной. Получается набрать массив объектов класса, но не получается классом сделать сам массив.
Не понял, что значит "классом сделать сам массив"? А как на LS можно Type'ом сделать сам массив?
Массив объектов как и типов понятно:
Redim arrC(1 To k) As MyClass
Redim arrT(1 To k) As MyType
 
garri
У Вас есть некая задача. Вы решили реализовать её таким-то образом и задаёте уточняющие вопросы по конкретно Вашей реализации. Было бы лучше обнародовать саму задачу, тогда, возможно, Вам бы посоветовали другие, более оптимальные реализации. В частности, может быть и такое решение:

Код:
Class MyClass
Public MyArr As Variant

Sub New(db as NotesDatabase, doc As NotesDocument)
'...
End Sub
End Class

'использование
Dim Myvar As New MyClass(db, doc)
Forall element In Myvar.MyArr
'...
End Forall

P.S. Прошу не пинать ногами — это на уровне идеи
 
Я понял, спасибо за пинок в нужную сторону))
Задача оптимизировать вложенные циклы, где перебираются документы. На локале работает отлично, по внутренней сети похуже, через интернет вообще труба. Пытаюсь сократить количество обращений к базе. Один раз обратился, засунул нужные поля из нужных документов в массивы и потом работаю с массивами. Подозреваю, что будет быстрее.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab