Перейти к содержимому

Фотография

несоответствие типов?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 windsurfer

windsurfer

    Новый участник

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Теплухин Иван Васильевич

Отправлено 18 мая 2009 - 13:32

Мозги едут, никак не пойму, что не так в этом коде:
Sub Nav(winname, counter)
   i = 0
Do until i = counter
Window(winname).Type  micReturn
i = i+1
Loop
End Sub

при запуске и вызове
Call Nav("PuTTY", 3)

получаю: Несоответствие типа: 'Nav'

как поправить?

p.s
что-то совсем не так... даже такое не работает:
Sub FunkySheet(counter)
msgbox counter
End Sub

Еще хуже!
Взял пример из хелпа, то же самое, черт дери! Что делать?


[решено] В общем, это глюк. Походу, QTP при запуске теста считал, что надо выполнить RUN FROM STEP, а не полный прогон. Полная перезагрузка компа решила проблему.

  • 0

#2 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 19 мая 2009 - 11:07

Мозги едут, никак не пойму, что не так в этом коде:

Sub Nav(winname, counter)
   i = 0
Do until i = counter
Window(winname).Type  micReturn
i = i+1
Loop
End Sub

при запуске и вызове
Call Nav("PuTTY", 3)

...

Использование Call для запсука процедуры с передачей параметров в скобках не есть хорошая практика.
Call рекомендуется использовать, когда нужно вызвать функцию, но при этом возвращаемое функцией значение не используется в дальнейшем и получать его не нужно.
  • 0

#3 gralex

gralex

    Новый участник

  • Members
  • Pip
  • 52 сообщений
  • ФИО:Груба Алексей

Отправлено 19 мая 2009 - 14:47

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


ch_ip,
можете пояснить почему использование конструкции Call Sub(...) не хорошо?

Явных ограничений на использования Call для вызова процедур не встречал, в данном случае вызов процедуры как раз соответствует вызову функции, когда возвращаемое значение не используется :)
Вообще были проблемы (обсуждались и на этой ветве форума) при Call с передачей параметров по ссылке/значению, но к данной теме это отношения не имеет вроде как.
  • 0

#4 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 20 мая 2009 - 08:38

можете пояснить почему использование конструкции Call Sub(...) не хорошо?

Нехорошо потому, что процедуры отлично выполняются без Call, а функцию можно вызвать только через Call
Call MyFunction
либо же в правой части операции присвоения
Dim a: a = FunctionCall
При чтении кода очень полезно бывает понимать, что вызывается, процедура иди функция. Если использовать Call для вызова как процедур, так и функций, то в таком коде при чтении будет невозможно разделить вызов процедуры от вызова функции.

Явных ограничений на использования Call для вызова процедур не встречал

Явных ограничений никаких нет. Так же, как, например, на объявление переменных :) Тем не менее, в любых пособиях по написанию качественного кода рекомендуется объявлять переменные.

в данном случае вызов процедуры как раз соответствует вызову функции, когда возвращаемое значение не используется :)

Не понимаю, как вызов процедуры может соответствовать вызову функции. Повторно используемый код сразу определяется либо как функция, которая возвращает значение всегда
Public Function MyFunction
либо как процедура, которая никогда не возвращает значение
Public Sub MySub

Вообще были проблемы (обсуждались и на этой ветве форума) при Call с передачей параметров по ссылке/значению, но к данной теме это отношения не имеет вроде как.

Никогда не испытывал проблем при передачи параметров. Единственная проблема, которая может возникать, это при вызове процедуры с единственным параметром, который ей пытаются передать в скобках. В этом случае параметр будет передаваться по значению всегда, поскольку VBScript будет интерпретировать данную ситуацию как вызов процедуры MySub с параметром (a). И сначала выполнит действие в скобках, т.е. получит значение переменной a, а потом передаст его в качестве параметра в процедуру MySub.
Dim a
Public Sub MySub(byRef parametr)
   parametr = 6
End Sub
a = 10
MySub a
Print a ' 6 will be printed
a = 10
MySub(a)
Print a ' 10 will be printed

  • 0

#5 gralex

gralex

    Новый участник

  • Members
  • Pip
  • 52 сообщений
  • ФИО:Груба Алексей

Отправлено 20 мая 2009 - 09:48


можете пояснить почему использование конструкции Call Sub(...) не хорошо?

Нехорошо потому, что процедуры отлично выполняются без Call, а функцию можно вызвать только через Call


Почему же - функцию отлично можно вызывать без Call и не присваивая ее результата никакой переменной.
Вариант целесообразности использования - передача в качестве параметра результата вычисления функции
MsgBox plus(10, minus(11, 10))

Function plus(ByVal a, ByVal b)
   plus = a + b
End Function

Function minus(ByVal a, ByVal b)
   minus = a - b
End Function


Call MyFunction
либо же в правой части операции присвоения
Dim a: a = FunctionCall
При чтении кода очень полезно бывает понимать, что вызывается, процедура иди функция. Если использовать Call для вызова как процедур, так и функций, то в таком коде при чтении будет невозможно разделить вызов процедуры от вызова функции.

Согласен, что это влияет на читабельность кода.

Явных ограничений на использования Call для вызова процедур не встречал

Явных ограничений никаких нет. Так же, как, например, на объявление переменных :) Тем не менее, в любых пособиях по написанию качественного кода рекомендуется объявлять переменные.

Относительно объявления переменных - использование конструкции Option Explicit как раз и накладывает такое ограничение :)
Можно пример пособия по написанию качественного кода? Честно, не встречал такого и хотелось бы почитать для своего развития.

Вообще были проблемы (обсуждались и на этой ветве форума) при Call с передачей параметров по ссылке/значению, но к данной теме это отношения не имеет вроде как.

Никогда не испытывал проблем при передачи параметров. Единственная проблема, которая может возникать, это при вызове процедуры с единственным параметром, который ей пытаются передать в скобках. В этом случае параметр будет передаваться по значению всегда, поскольку VBScript будет интерпретировать данную ситуацию как вызов процедуры MySub с параметром (a). И сначала выполнит действие в скобках, т.е. получит значение переменной a, а потом передаст его в качестве параметра в процедуру MySub.
Dim a
Public Sub MySub(byRef parametr)
   parametr = 6
End Sub
a = 10
MySub a
Print a ' 6 will be printed
a = 10
MySub(a)
Print a ' 10 will be printed


Да, точно - именно такая проблема и обсуждалась.
Нормального пояснения найти на удалось - спасибо, ваше пояснение похоже на правду ;)
  • 0

#6 chernoslav

chernoslav

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Станислав Чернов

Отправлено 11 мая 2011 - 05:42

Вчера случилась проблема, аналогичная проблеме топикстартера. Разница лишь в том, что QTP корректно работает с функциями, определёнными внутри скрипта, но если они определены в стороннем файле-библиотеке (File->Settings ->Parameters), то выдаёт сообщение.

upd. QTP вообще перестал ресурсы открывать..
upd2. Полечилось удалением и установкой QTP заново.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных