Эээ... Ну, скажем... Короче, присвоение значения функции...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Эээ... Ну, скажем... Короче, присвоение значения функции...

Сообщение GSerg » 19.11.2003 (Ср) 16:32

Как известно, имя функции можно юзать внутри тела функции в качестве переменной. Если это имя стоит в выражении слева, то компилятор однозначно понимает, что это мы хотим достучаться до этой самой переменной, а вовсе не вызываем функцию рекурсивно.
Если же имя стоит в выражении справа, то:
  • если у функции есть параметры, а мы их не указываем, то происходит достукивание до переменной
  • если параметры есть, и мы их указываем, происходит рекурсия
  • если параметров нет, то рекурсия происходит всегда!


Спрашивается, как достучаться до переменной-имени функции, если оно стоит в выражении справа, а у функции нет параметров? До сих пор приходилось заводить дополнительную переменную, и в конце присваивать её имени, но не нравится мне это как-то…
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 19.11.2003 (Ср) 18:02

ну ты бы код высветил на обозрение, а то вот так на словах как-то не так :wink: ..
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.11.2003 (Ср) 18:28

А код-то зачем?

GSerg, мне кажется тут ничего не сделаешь. И так VB много вольностей позволяет (не в каждом языке можно использовать имя функции слева, не то что справа). То бишь дополнительная переменная -- это удел VBшников :)
Я например для каждой более-менее сложной функции сразу объявляю переменную (ret или res), что-бы потом не мучаться соблазном от нее избавиться.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение GSerg » 20.11.2003 (Чт) 9:36

И на том спасибо.
В смысле, что разрешил мои сомнения :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Vi » 20.11.2003 (Чт) 13:28

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

Private Sub Form_Load()
  Dim x As Long, y As Long
  x = FuncWithoutRecursion()
  y = FuncWithRecursion()
  Debug.Print x, y
End Sub

Public Function FuncWithoutRecursion() As Long
  FuncWithoutRecursion = 1
  FuncWithoutRecursion = 2 * FuncWithoutRecursion + 1
End Function

Public Function FuncWithRecursion() As Long
  Static iRepeater As Long
  FuncWithRecursion = 1
  iRepeater = iRepeater + 1
  If iRepeater < 3 Then
    FuncWithRecursion = 2 * FuncWithRecursion() + 1
  End If
End Function

Результат - 3 и 7.
В VB6 FuncWithoutRecursion не вызывается рекурсивно.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList