2009-10-29 5 views
0

VBScript в ASP Classic содержит функцию «int». (Он округляет числа к -∞.) Предположим, что некоторый чрезмерно «умный» кодер создал глобальную переменную с именем «int». Есть ли способ получить исходную функцию? Я пробовал всевозможные обходные пути с обрезами и изворотливыми execs, но без кубиков. Я подозреваю, что это невозможно, но я надеюсь, что кто-то узнает об этом больше, чем я.VBScipt: вызов встроенных функций, затененных глобальными переменными

EDIT: Спасибо за ответы. Поскольку y'all спросила, глобальная переменная, называемая «Int» (хотя, к сожалению, vbscript не учитывает регистр), является фабрикой для класса, аналогичного Integer Java. Свойство default по существу является конструктором с одним аргументом; то есть «Int (42)» дает новый объект IntClass, содержащий 42. Свойство по умолчанию для IntClass, в свою очередь, просто возвращает необработанное число.

Создатель пытался обойти отсутствие собственных пространств имен и статических методов, и решение на самом деле довольно бесшовно. Передайте в IntClass, где ожидается int, и он автоматически активирует свойство по умолчанию. Я пытаюсь исправить последний оставшийся шов: внешний код, вызывающий «int», не будет округлен должным образом (потому что конструктор использует CLng).

ответ

3

Не знаю, что я знаю, getref работает только с пользовательскими функциями, а не на встроенных модулях. Я бы предложил переименовать функцию custom'int и обновить все ссылки на эти пользовательские. Вы можете использовать функцию поиска visual studio (express) или любой другой инструмент, который вам нравится. Не стоит много работать.

+0

То глупое имя переменной, если есть хоть один, я supprised VB даже позволяет более написать ключевое слово как это? Переименование - разумное решение. Быстро взломать может быть, чтобы сбить JScript-версию Int, включить это и назвать это вместо этого, неприятно, хотя ... –

+0

Да, я тоже не поверила, пока не попробовала. Удивительно, что vbscript позволяет вам стрелять в ногу так. Я согласен, что попытка обойти эту проблему будет только для того, чтобы сделать код намного более непостижимым. – NobodyMan

0

Или вы можете использовать вместо CInt на Int

response.write trim(cint(3.14)) + "<br>" 

Wrong !! See NobodyMan comments

+1

Нет кубиков - CInt округляется до ближайшего целого числа, Int всегда округляет * вниз *: cint (5.6) равно 6, тогда как int (5.6) равно 5. – NobodyMan

+0

fix() ближе, но немного отличается от int(): исправляет раунды к * нулю *, поэтому fix (-3.1) будет -3, int (-3.1) - -4. – NobodyMan

+0

Вы правы, я забыл о том, что «Не делает» –

0

Я не думал, что зарезервированы слова для имен функций или переменных.

Дункансон справа. Сделайте боль и переименуйте int. Скорее всего, дела идут хуже, чем только это.

(почему бы кому-то сделать глобальную переменную с именем Int ... что собирается занять некоторое мышление)

Смежные вопросы