Function call on left-hand side of assignment...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Function call on left-hand side of assignment...

Сообщение zHackLeX » 22.07.2006 (Сб) 22:24

...как сказано в окне об ошибке, must return Variant or Object.
А собсно, как вообще можно использовать функции слева от знака присвоения? Дайте плиз хоть один живой пример!
Вот просто интересно - что это эа техника - нигде не видал. (ну или смотрел плохо :/)
Заранее thx!
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.07.2006 (Сб) 22:36

Ну, например, когда функция возвращает объект, у которого есть свойство по умолчанию...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sacred Phoenix
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 22.07.2006 (Сб) 18:20

Сообщение Sacred Phoenix » 22.07.2006 (Сб) 22:45

of assignment
по ходу имеется в виду что-то типа
Код: Выделить всё
SomeFunction() = SomeExpression
а пример ф-ции, возвращающей какой-нить объект, будет, например, таким:
Код: Выделить всё
SomeFunction().Prop = SomeExpression

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 22.07.2006 (Сб) 23:01

zHackLeX
к примеру тебе стандартн. ф-я Date. (для эксперимента) :)
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 22.07.2006 (Сб) 23:16

Date - функция? :shock:
Object Browser писал(а):Property Date As Variant
Member of VBA.DateTime
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.07.2006 (Вс) 6:58

Код: Выделить всё
Option Explicit

Private Sub Form_DblClick()
Message = "Извращенцы, блин. Нате, смотрите."
End Sub

Private Function Message()
Set Message = Label1
End Function
Изображение

Sacred Phoenix
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 22.07.2006 (Сб) 18:20

Сообщение Sacred Phoenix » 23.07.2006 (Вс) 10:52

ага, а функция-то вариантная!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.07.2006 (Вс) 11:21

Phoenix, ну переобъяви её как As Label, раз такой умный.
Изображение

XPAHuTEJIb
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 12.07.2006 (Ср) 15:04
Откуда: Новый Уренгой

Сообщение XPAHuTEJIb » 24.07.2006 (Пн) 7:27

Код: Выделить всё
Option Explicit

Private Sub Form_DblClick()
Message = "Извращенцы, блин. Нате, смотрите."
End Sub

Private Function Message()
Set Message = Label1
End Function

У меня прекрасно работает, т.е. при даблклике label1.caption=message
Как вариант ответа: http://www.vbnet.ru/forum/show.aspx?id=83900
Еще, как вариант - MSDN:
статья Property Procedures vs. Public Variables (Свойства против методов)
The Sensible Error Argument
If you forget that you made Item a read-only property and try to assign a
value to it, you'll most likely find it easier to understand the error
message Visual Basic raises for a Property Get Ч "Can't assign to read-only
property" Ч than the error message it raises for a Function procedure Ч
"Function call on left-hand side of assignment must return Variant or
Object."

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Function call on left-hand side of assignment...

Сообщение tyomitch » 24.07.2006 (Пн) 7:36

XPAHuTEJIb, начнёшь когда-нибудь читать топики, прежде чем отвечать, или нет?

zHackLeX писал(а):А собсно, как вообще можно использовать функции слева от знака присвоения? Дайте плиз хоть один живой пример!
Изображение

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Function call on left-hand side of assignment...

Сообщение Vi » 24.07.2006 (Пн) 8:01

zHackLeX писал(а):А собсно, как вообще можно использовать функции слева от знака присвоения? Дайте плиз хоть один живой пример!

Хороший пример - функция Mid
Код: Выделить всё
  Dim s As String
  s = "xxxx"
  Mid(s, 2, 2) = "zzz"

Второй пример - свойство с параметром/ами (причем здесь неважно какого типа возвращаемое значение)
Код: Выделить всё
Public Property Get xxx(ByVal i As Long) As Long
  Debug.Print "Get", i
... вернуть [i]
End Property

Public Property Let xxx(ByVal i As Long, ByVal vNewValue As Long)
  Debug.Print "Let", i, vNewValue
... сохранить в [i]
End Property

  Me.xxx(2) = 22
  k= Me.xxx(2)

PS
Скорее всего, ты использовал Set-оператор, для которого возвращаемое значение должно быть или Объектом, или Вариантом с Объектом.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.07.2006 (Пн) 8:06

Vi,
1) живой пример уже приведён выше ;-)
2) Mid не возвращает объект. Синтаксис, когда Mid стоит слева от знака присваивания, -- это особый случай, обрабатываемый компилятором VB, наравне с синтаксисом Print и Line.
3) свойство с параметром -- это не функция, и для неё упомянутая ошибка никогда не возникает
Изображение

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 24.07.2006 (Пн) 8:10

Код: Выделить всё
Private Function Message() As String
Set Message = Label1
End Function

Вот эта "As String" и дает сообщение.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.07.2006 (Пн) 8:22

Она даёт сообщение "Object required", а совсем даже не приведённое автором.
Изображение

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 24.07.2006 (Пн) 8:47

tyomitch писал(а):Она даёт сообщение "Object required", а совсем даже не приведённое автором.

После двойного клика на форме:

Изображение

Я не понимаю, о каком "Object required" ты говоришь.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.07.2006 (Пн) 8:58

А вот о таком. (По нажатию на Ctrl+F5)
Вложения
ToVi.gif
(24.53 Кб) Скачиваний: 107
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 52

    TopList