多余的任务解决了无法解释的崩溃

时间:2019-01-03 18:22:21

标签: vbscript asp-classic

我正在测试一个我编写的格式化时间间隔的小片段(例如last change 5m23s ago),并不断收到我无法理解的错误。每次我尝试直接在调用i中使用循环变量ts()时,ASP都会通知我An error occurred...

'the function
function ts(s)
    dim m: m = CLng(s \ 60): s = s mod 60
    dim h: h = CLng(m \ 60): m = m mod 60
    ts = right("00" & h, 2) & "h" & _
         right("00" & m, 2) & "m" & _
         right("00" & s, 2) & "s" 
end function 

'the test
for i = 0 to 90000 step 15 
   '               response.write i & ": " & ts(i) & "<br />" 'an error has occurred
    dim j: j = i : response.write i & ": " & ts(j) & "<br />" 'works fine
next 

这到底是怎么回事?

为什么ts(i)每次都会产生错误?
鉴于此,j=i : ts(j)为什么工作正常?

变量i不会有问题,因为它可以在write调用中正常工作。这是我尝试过的其他方法:

response.write i & ": "                     'no problem
'response.write ts(i)                       'crashes
'dim x: x = ts(i)                           'crashes
dim j: j = i                                'no problem
dim x: x = ts(j)                            'works
response.write x & "<br />"                 'works 
'response.write ts(j) & "<br />"            'also works 
'response.write i & ": " & ts(j) & "<br />" 'also works 

(最后,我知道有一种方法可以使IIS显示真正的错误。我很想听听如何在不使用RDP访问Web服务器的情况下做到这一点。)

1 个答案:

答案 0 :(得分:1)

omegastripes吸引了我。

显然,在VBScript中,默认设置是将参数传递ByRef权限。
(从字面上看,我曾经使用过的所有其他编程语言都会传递原语ByVal ue)

当我在函数内部更改s的值时,这引起了一个问题。

这些片段中的任何片段都可以正常工作:

function ts(ByVal s)
    ...
...
ts(i)

function ts(sec)
    dim s: s = sec
    ...
...
ts(i)

(或,如OP中所述,将值传递到非循环迭代器变量中)

function ts(s) 
... 
dim j: j = i: ts(j)