<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Игнорирование Option Explicit внутри Execute]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=12381&amp;type=atom" />
	<updated>2017-02-21T11:19:36Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=12381</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=112984#p112984" />
			<content type="html"><![CDATA[<p><strong>Михаил Орлов</strong>, </p><div class="quotebox"><blockquote><p>Переписал до рабочего состояния. (Или до вменяемого сообщения об ошибке, если раскомментировать DIM echo.)</p></blockquote></div><div class="quotebox"><blockquote><p>В моём примере нет бага, конечно.</p></blockquote></div><p>Просто не понял - для чего ? <img src="//forum.script-coding.com/img/smilies/roll.png" width="15" height="15" /> Т.е какова цель ?</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2017-02-21T11:19:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=112984#p112984</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=112980#p112980" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong><br />В моём примере нет бага, конечно.</p>]]></content>
			<author>
				<name><![CDATA[Михаил Орлов]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34545</uri>
			</author>
			<updated>2017-02-21T09:56:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=112980#p112980</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=112979#p112979" />
			<content type="html"><![CDATA[<p><strong>Михаил Орлов</strong>, не понял. А в чём баг ?<br />После выполнения строки &quot;<strong>Dim echo</strong>&quot;, указатель с ссылки на функцию становится ссылкой на переменную. Логично, что следующий вызов <strong>echo(&quot;some text&quot;)</strong> генерит ошибку несоответствия типа. Вроде бы всё верно ? O_o</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2017-02-21T09:43:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=112979#p112979</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=112977#p112977" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>В тему багов...</p></blockquote></div><p>Попробую продолжить. Переписал до рабочего состояния. (Или до вменяемого сообщения об ошибке, если раскомментировать DIM echo.)<br /></p><div class="codebox"><pre><code>Execute &quot;Function echo(text):&quot; &amp; _
			&quot;MsgBox(text):&quot; &amp; _
		&quot;End Function&quot;
&#039; Dim echo
MsgBox &quot;VarType: &quot; &amp; VarType(echo(&quot;some text&quot;))
MsgBox TypeName(echo(&quot;some text&quot;))</code></pre></div><p>По теме - да, баг. Наверно, сложно было обнаружить.</p>]]></content>
			<author>
				<name><![CDATA[Михаил Орлов]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34545</uri>
			</author>
			<updated>2017-02-21T08:29:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=112977#p112977</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=111772#p111772" />
			<content type="html"><![CDATA[<p>В тему багов...<br /></p><div class="codebox"><pre><code>
Execute &quot;Sub echo(text):&quot; &amp; _
			&quot;MsgBox(text):&quot; &amp; _
		&quot;End Sub&quot;
	
Dim echo

MsgBox &quot;VarType: &quot; &amp; VarType(echo)

MsgBox TypeName(echo)
</code></pre></div><p>VarType: 76 ??</p><p>TypeName: </p><div class="quotebox"><blockquote><p>Ошибка:	Переменная использует не поддерживаемый в VBScript тип программирования объектов: &#039;TypeName&#039;</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2017-02-01T17:09:05Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=111772#p111772</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=111765#p111765" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Михаил Орлов пишет:</cite><blockquote><p>Согласно документации, Execute исполняет код в контексте места вызова</p></blockquote></div><p>Как оказывается, кроме игнорирования Option Explicit, он создает незадекларированные переменные не в контексте вызова, а в глобальном. <a href="http://forum.script-coding.com/viewtopic.php?pid=81491#p81491">Однажды я писал про это</a> и еще про кое-какую &quot;багофичу&quot; Execute.</p>]]></content>
			<author>
				<name><![CDATA[omegastripes]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29228</uri>
			</author>
			<updated>2017-02-01T15:49:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=111765#p111765</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=111687#p111687" />
			<content type="html"><![CDATA[<p><strong>Михаил Орлов</strong>, не хочется разводить оффтоп, но не могу согласиться по некоторым моментам, поэтому поясню свою позицию. В моём понимании &quot;<strong>баг</strong>&quot; это что либо приводящее к сбою в работе. К примеру некорректное подключение скриптовых интерпретаторов к событиям объекта <strong>WinHttpRequest</strong>, которое приводит к краху процесса. Давнишний баг, который так и не пофиксили. Но опять же считать это багом интерпретатора тоже, наверное, не совсем верно. Так как там беда кроется в нестандартной организации интерфейса обработчика событий. На некоторых билдах 10-ки были замечены &quot;баги&quot; при работе с объектом <strong>InternetExplorer.Application</strong> Связь с объектом отваливалась после вызова метода <strong>Navigate</strong>. Хотя в VB6 объект продолжал работать стабильно. К чему я веду ? К тому что если бы объявление переменной &quot;<strong>Dim a</strong>&quot; или ,к примеру, функция деления работала в половине случаев правильно, а в половине нет, то такой вариант я бы посчитал &quot;багом&quot;. Кстати не так давно видел обсуждение на каком-то форуме, о том, что функции <strong>FormatCurrency</strong> и <strong>FormatDateTime</strong> возвращают разные результаты на системах с разным языком. Разработчик был не в курсе, что эти функции региональнозависимые от функции <strong>SetLocale</strong>. Считать это &quot;багом&quot; ? Не думаю. Считать &quot;фичей&quot;... Тоже как-то странно.</p><div class="quotebox"><blockquote><p>По обоим критериям получается, что и Execute(&quot;A=1&quot;), и дублирование имён функций - баги, т. к. в документации их нет,&nbsp; &nbsp;польза сомнительна, а потенциальный вред понятен</p></blockquote></div><p>Не поверите, но иногда возникает необходимость в подмене функций в готовом модуле. И тогда такая возможность оказывается очень полезна. По поводу документации, сразу вспомнилась история про американскую пенсионерку, которая &quot;посушила&quot; кота в СВЧ печке, а потом предъявила иск страховой компании за то, что получила жаркое вместо кота и выиграла суд. С тех пор инструкции к забугорной бытовой технике по толщине с небольшую книгу. Потому что компании приходится расписывать, что их прибор нельзя засовывать в .... ковырять им в ...., а не то .... и ой ой ой<br />Я к тому, что - ну нельзя ж всё расписывать. Поэтому исходят из логики - что не запрещено, то разрешено. Например ни кто не запрещает в именах переменных и функций в VBS использовать не только латиницу, </p><div class="codebox"><pre><code>Dim [переменная]: [переменная] = 1</code></pre></div><p>но сказать, что это сплошь и рядом написано - не видел.</p><p>Вообще по поводу &quot;feature&quot; в английском <a href="https://www.google.ru/webhp?sourceid=chrome-instant&amp;ion=1&amp;espv=2&amp;ie=UTF-8#q=feature">переводе</a> &quot;feature&quot; переводится как &quot;особенность&quot;. Я не против &quot;американизмов&quot;, но слово &quot;особенность&quot;, лично мне - ближе.</p><p>P.S Сейчас по работе приходится иметь дело с USB токенами, устройствами криптографии. Работа с ними осуществляется через Сишные библиотеки с функциями написанными по стандарту PKCS11. В этом стандарте расписано какие функции и с какими именами должна содержать библиотека, какие данные должны возвращать и какие параметры получать на вход каждая функция. НО ! У меня сейчас на столе лежит 3 класса устройств и 3 библиотеки для работы с ними. И У КАЖДОЙ есть своя &quot;багофича&quot; при реализации функций ПО ОБЩЕМУ стандарту PKCS11, будь он не ладен ! )</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2017-01-31T11:20:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=111687#p111687</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=111686#p111686" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>Текст ошибки-то читали?</p></blockquote></div><p>Нет, ввиду отсутствия оного.<br /></p><div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>Так чего ждать от скрипта, если одна из переменных не объявлена (хоть в Execute, без разницы)?</p></blockquote></div><p>Я бы ждал сообщения об ошибке во время выполнения. К сожалению, его нет, про это и тема.</p><p>Или вы имеете ввиду часть кода:<br /></p><div class="codebox"><pre><code>A = &quot;some&quot; : B = &quot;thing&quot; &#039; будет ошибка, переменная A не декларирована</code></pre></div><p>Так речь не о ней.</p>]]></content>
			<author>
				<name><![CDATA[Михаил Орлов]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34545</uri>
			</author>
			<updated>2017-01-31T11:14:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=111686#p111686</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=111683#p111683" />
			<content type="html"><![CDATA[<p><strong>Михаил Орлов</strong><br />Текст ошибки-то читали? Так чего ждать от скрипта, если одна из переменных не объявлена (хоть в Execute, без разницы)?</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2017-01-31T10:13:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=111683#p111683</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=111679#p111679" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong><br />Если так рассуждать, получится, что нет ни &quot;багов&quot;, ни &quot;фич&quot;, а есть одни лишь &quot;особенности&quot; <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />По-моему, в первом приближении, если &quot;особенность&quot; задумана разработчиками, то она - фича, если &quot;само получилось&quot; - баг. В мысли программистов Microsoft мы, конечно, не залезем, но их касательно продукта положено отражать в документации. То есть: нет в документации - баг. (Критерий не чёткий, т. к. программист может и знать об &quot;особенности&quot; своего продукта, но не документировать и не устранять её, сочтя несущественной.)<br />Другой критерий - потенциальный вред/польза/безвредность особенности, добавит она программисту возможности или проблемы.<br />По обоим критериям получается, что и Execute(&quot;A=1&quot;), и дублирование имён функций - баги, т. к. в документации их нет,&nbsp; &nbsp;польза сомнительна, а потенциальный вред понятен. Но я могу ошибаться, поэтому решил узнать, что об этом думают гуру VBScript.<br />Оказалось, гуру VBScript о такой ерунде не думают <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[Михаил Орлов]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34545</uri>
			</author>
			<updated>2017-01-31T09:34:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=111679#p111679</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=111662#p111662" />
			<content type="html"><![CDATA[<p><strong>Михаил Орлов</strong>, хм... Назвать это &quot;багом&quot; или &quot;фичей&quot; язык не поворачивается. </p><p><strong>ВасилийП</strong> уже сделал для себя открытие в объявлении функций с одинаковым именем - <a href="http://forum.script-coding.com/viewtopic.php?id=12357">ссылка</a>. Он тоже поинтересовался &quot;баг&quot; это или &quot;фича&quot;.</p><p>Я бы сказал ни то ни другое, а &quot;особенность работы интерпретатора, заложенная разработчиками.&quot; <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2017-01-30T15:20:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=111662#p111662</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Игнорирование Option Explicit внутри Execute]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=111659#p111659" />
			<content type="html"><![CDATA[<p>Добрый день, уважаемые.</p><p>Обнаружил особенность: внутри Execute не действует Option Explicit, то есть можно использовать не декларированные явно переменные. Пример:<br /></p><div class="codebox"><pre><code>Option Explicit
Dim B

A = &quot;some&quot; : B = &quot;thing&quot; &#039; будет ошибка, переменная A не декларирована 

Execute &quot;A = &quot;&quot;some&quot;&quot; : B = &quot;&quot;thing&quot;&quot;&quot; &#039; а это отработает нормально
Msgbox A &amp; B

A = &quot;same&quot; : B = &quot;thing&quot; &#039; теперь А декларирована неявно ранее, несмотря на Option Explicit, поэтому ошибки нет
Msgbox A &amp; B</code></pre></div><p>Option Explicit, применённая внутри Execute, действует. Пример:<br /></p><div class="codebox"><pre><code>Option Explicit
Dim B

Execute &quot;Option Explicit : A = &quot;&quot;some&quot;&quot; : B = &quot;&quot;thing&quot;&quot;&quot; &#039; теперь будет ошибка</code></pre></div><p>Согласно документации, Execute исполняет код в контексте места вызова, то есть Option Explicit должна действовать для кода, исполняемого Execute.<br />Кроме этого, Option Explicit не имеет понятия области действия, а всегда действует на весь скрипт.</p><p>Хочу попросить у вас комментария: это баг или фича?</p>]]></content>
			<author>
				<name><![CDATA[Михаил Орлов]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34545</uri>
			</author>
			<updated>2017-01-30T14:42:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=111659#p111659</id>
		</entry>
</feed>
