Что означает ByRef в vbscript при переходе к процедуре? - PullRequest
1 голос
/ 27 февраля 2012

У меня есть следующий запуск вызова процедуры

strReturn = OrderCreate(strGen8, _
                        strUID, _
                        Order, _
                        boolRecapFlag, _

И для функции, которая получает параметры, которые у нас есть ..

function OrderCreate(strCoDiv, strUID, byRef Order, boolRecap, strBillFirst, etc.

Так как я не мог найти где-нибудь, где Orderценности передавались в процедуру.Должен ли я считать, что ByRef позволяет выводить данные из процедуры?Используя имя переменной Order?

Ответы [ 3 ]

4 голосов
/ 27 февраля 2012

Параметры могут быть переданы в функцию двумя способами: по ссылке (ByRef) или по значению (ByVal).В VBScript по умолчанию используется метод ByRef.

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

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

1 голос
/ 28 февраля 2012

Разница между byref и byval

dim my_org_age,my_wife_org_age

my_org_age = 43
my_wife_org_age = 43

Call make_our_ages_younger(my_org_age, my_wife_org_age)

После вышеприведенного подпрограммы (заметьте, это даже не функция!), My_org_age и my_wife_org_age будут на десять лет моложе!

Это потому, что соответствующая функция здесь берет свои аргументы с помощью REf

sub make_our_ages_younger(byref my_age,byref her_age)
    my_age = my_Age-10
    her_age = her_age-10
end sub

Теперь, если вы удалите из него слова "byRef", а затем выполните

Call make_our_ages_younger(my_org_age, my_wife_org_age)

вы заметите, что наш возраст не изменится.

Видите разницу, что теперь делает byRef?

HTH

1 голос
/ 27 февраля 2012

byRef означает, что вы передаете ссылку на исходную переменную. Поэтому, если вы измените значение в функции, оно будет отражено обратно на исходное значение

Это отличается от byVal , который передает значения и делает независимую копию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...