Asp classic VBScipt:调用被全局变量隐藏的内置函数

Asp classic VBScipt:调用被全局变量隐藏的内置函数,asp-classic,vbscript,scoping,Asp Classic,Vbscript,Scoping,ASP Classic上的VBScript包含一个“int”函数。(它将数字向四舍五入。)-∞.) 假设某个非常“聪明”的程序员创建了一个名为“int”的全局变量。有没有办法获得原始函数?我已经尝试了各种各样的解决方法,包括范围和狡猾的执行者,但没有骰子。我怀疑这是不可能的,但我希望有人比我更了解它 编辑:感谢您的回答。由于您的提问,名为“Int”的全局变量(不幸的是,vbscript不区分大小写)是一个类似于Java Integer的类的工厂。默认属性本质上是一个单参数构造函数;即“Int(4

ASP Classic上的VBScript包含一个“int”函数。(它将数字向四舍五入。)-∞.) 假设某个非常“聪明”的程序员创建了一个名为“int”的全局变量。有没有办法获得原始函数?我已经尝试了各种各样的解决方法,包括范围和狡猾的执行者,但没有骰子。我怀疑这是不可能的,但我希望有人比我更了解它

编辑:感谢您的回答。由于您的提问,名为“Int”的全局变量(不幸的是,vbscript不区分大小写)是一个类似于Java Integer的类的工厂。默认属性本质上是一个单参数构造函数;即“Int(42)”生成一个包含42的新IntClass对象。IntClass的默认属性只返回原始数字


创建者试图解决缺少合适的名称空间和静态方法的问题,而解决方案实际上是无缝的。传入一个预期为int的IntClass,它将自动触发默认属性。我正在尝试修补最后剩下的接缝:调用“int”的外部代码将无法正确舍入(因为构造函数使用CLng)。

据我所知,getref仅适用于自定义函数,而不适用于内置函数。我建议重命名自定义“int”函数并更新对该自定义函数的所有引用。您可以使用搜索函数visual studio(express)或者您喜欢的任何其他工具。应该不会有太多的工作。

据我所知,getref仅适用于自定义函数,而不适用于内置函数。我建议重命名自定义“int”函数并更新对此自定义函数的所有引用。您可以使用搜索函数visual studio(express)或者您喜欢的任何其他工具。应该不会有太多工作。

或者您可以在
Int
上使用
CInt

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

错了!! 请参阅NobodyMan评论,或者您可以在
Int
上使用
CInt

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

错了!!
参见NobodyMan注释

我认为函数名或变量不允许使用保留字

邓肯森是对的。做痛苦和痛苦。很可能有比这更糟糕的事情发生


(为什么有人会创建一个名为int的全局变量……这需要一些思考)

我认为函数名或变量不允许使用保留字

邓肯森是对的。做痛苦和痛苦。很可能有比这更糟糕的事情发生


(为什么有人会创建一个名为int的全局变量……这需要一些思考)

这是一个愚蠢的变量名,如果曾经有过的话,我很希望VB能让你写一个这样的关键字?重命名是一个明智的解决方案。一个快速的黑客可能是找到一个JScript版本的Int include,并称之为那一个,虽然很讨厌……是的,我也不相信,直到我自己尝试过。令人惊讶的是vbscript可以让你像这样攻击自己。我同意试图解决这个问题只会让代码变得更加难以理解。这是一个愚蠢的变量名,如果曾经有过的话,我希望VB甚至可以让你写一个这样的关键字?重命名是一个明智的解决方案。一个快速的破解可能是敲出一个JScInt的ipt版本包括这个,并称之为那个,虽然很讨厌…是的,我也不相信,直到我自己尝试了它。令人惊讶的是,vbscript可以让你像这样射中自己的脚。我同意,试图解决这个问题只会使代码变得更加难以理解。没有骰子——CInt将轮到nea剩余整数,Int总是向下舍入:cint(5.6)是6,而Int(5.6)是5。fix()更接近,但与Int()略有不同:fix向零舍入,所以fix(-3.1)是-3,Int(-3.1)是-4。没有骰子——cint将舍入到最接近的整数,Int总是向下舍入:cint(5.6)是6,而Int(5.6)是5。fix()更接近,但与int()略有不同:fix向零舍入,因此fix(-3.1)为-3,int(-3.1)为-4。