我正在尝试创建一个AHK脚本,只要输入'diss',就会输入随机的侮辱。但是,此刻,我每次输入'diss'时都会得到“Array [rand]”。
我做错了什么?
Array:= Object()
Loop, Read, C:\Users\dell\Desktop\insults.txt
{
Array.Insert(A_LoopReadLine)
}
::diss::
Random, rand, 0, 3
Send, Array[rand]
Return
答案 0 :(得分:2)
Deceiving_Solicitite在技术上是正确的...但我不觉得他很好地解释了他的代码,坦率地说,Hisham的代码只是写得更好,即使它错了(只有2个小)细节)。现在,据说可以进行编码。
弹出给我的第一个问题是你的发送命令。让我们尝试将Send, Array[rand]
更改为Send % Array[rand]
,现在代码可以在大多数情况下工作......
但这是什么意思?
注意%符号?这样做是在一个通常不评估表达式的命令上强制表达式。在AHK中对数组/对象进行处理,命令不会识别它们。
这仍然无法解释为什么只有"的代码适用于大多数代码 时间..."
事实证明,他所产生的随机数也存在轻微问题。当将值插入数组时,它们从1开始递增索引,并且他的随机数有时会产生零。因此,我们现在将该行更改为Random, rand, 1, 3
,此时代码已修复且在100%的时间内工作。
但如果他想要比3更多的侮辱怎么办?他必须经历 并计算每一行并修改他的随机命令?
这很愚蠢,因为我们可以让计算机为我们做这件事,因为计算文本行的速度比我们快得多。因此,我们只需将我们的随机生成结果放在1和数组的最大索引之间,如下所示:Random, rand, 1, % Array.MaxIndex()
。请注意%?我们再次强迫命令进行评估和表达。整洁吧?
已完成的代码:
Array:= Object()
Loop, Read, C:\Users\dell\Desktop\insults.txt
{
Array.Push(A_LoopReadLine)
}
::diss::
Random, rand, 1, % Array.MaxIndex()
Send % Array[rand]
Return
我希望你能从中吸取教训。
编辑:将Array.Insert(),deprecated更改为Array.Push()。
答案 1 :(得分:0)
您忘记在星座符号中设置数组的名称 - > %A_index%
fileread,contents,C:\Users\dell\Desktop\insults.txt
Loop, parse, contents, `n, `r
{
array%a_index% := A_LoopField
}
return
::diss::
Random, rand, 1, 3
tosend = array%rand%
tosend = % %tosend%
Send, %tosend%
Return
修复多件事..
1.试读变量
2.arrays可以用作变量名称
3.可行名称可以包含变量
报告我的代码是否适合您以及您是否理解。
/编辑我修复了代码并进行了测试。
为您的信息嵌入变量内的变量名称。 啊魔法