Слетают значения Paramlist внутри Property Set ( Paramlist )

Тема в разделе "Lotus - Программирование", создана пользователем turumbay, 26 май 2009.

  1. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    при использовании New справа от присваивания:
    Код (Text):
        Set treasureIsland.person( \"Сквайр Трелони\" ) =  New TPersonInfo( \"Туп, жаден, прожорлив, ленив, труслив, надменен. Богат. Характер отсутствует. Не женат.\")
    Код нормално компилируется, новый объект создается и передается в тело Property. Упс приходит неожиданно: слетают значения параметров проперти. При этом иногда ложится клиент. В данном примере теряется \"Сквайр Трелони\". Если объект предварительно создать - присвоение отрабатывает корректно.
    Проверено в 7.01, 7.03, 8.5
    Код (Text):
    Private Class TPersonInfo
    Private t_info As String
    Sub New( i_info As String )
    t_info = i_info
    End Sub
    End Class
    Private Class TBook
    Private t_person List As TPersonInfo
    Sub New()
    End Sub
    Public Property Set person( i_name As String ) As TPersonInfo
    Set t_person( i_name ) = person
    End Property
    End Class

    Sub Initialize
    Dim treasureIsland As New TBook
    Dim billy As New TPersonInfo( \"Обладатель карты Острова Сокровищ. Много пьёт и всегда простужен. Характер скверный. Не женат.\" )
    Set treasureIsland.person( \"Билли Бонс\" ) = billy

    \' следующая строка работает некорректно:
    Set treasureIsland.person( \"Доктор Ливси\" ) = New TPersonInfo( \"Очень хороший и весёлый человек. Характер общительный. Не женат.\")
    End Sub
    Вот такие вот грабли...
     
  2. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    R 6.5.4 тоже баг... забавно... это баг работы с памятью, когда объект передается через "временную переменную"-параметр функции (забыл как это называется правильно)...

    придется юзать так:
    Код (Text):
    Sub Initialize
    Dim treasureIsland As New TBook
    Dim billy As New TPersonInfo( "Обладатель карты Острова Сокровищ. Много пьёт и всегда простужен. Характер скверный. Не женат." )
    Set treasureIsland.person( "Билли Бонс" ) = billy
    ' следующая строка работает некорректно:
    Set billy = New TPersonInfo( "Очень хороший и весёлый человек. Характер общительный. Не женат." )
    Set treasureIsland.person( "Доктор Ливси" ) = billy
    End Sub
     
Загрузка...

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