[Skill]记录第一次让virtuoso卡死
2020-03-08 本文已影响0人
YEUNGCHIE
卡死了,甚至还没法正常退出,只能去kill掉。。。
周末写了一个小功能,想让两段接近的垂直path能够自己自动snap,并且希望这个功能能够循环调用。这样当我有一堆path需要操作的时候,就不需要每次snap都要按一下按键了。
- 最开始我是这样写的:
procedure(AutoSnapLoop() ;绑定给一个快捷键,让它循环调用下面的AutoSnap()。
prog(()
while(t
AutoSnap()
)
)
)
procedure(AutoSnap()
prog((/*省略一堆变量*/)
ep = enterPoint() ;能够让这个循环终止的关键点就是这里。
;省略一堆代码。
)
)
这么用不会让软件卡死,但按下esc试图退出编辑状态的时候会让ep的值为空,因此后续的程序会报出error,总之不是一个正常的操作。
- 因此我又这么写:
procedure(AutoSnapLoop() ;绑定给一个快捷键,让它循环调用下面的AutoSnap()。
prog(()
while(t
AutoSnap()
)
)
)
procedure(AutoSnap()
prog((/*省略一堆变量*/)
unless(ep = enterPoint() ;当按下esc的时候enterPoint()会返回nil,因此程序得以正常的return出去。
return("esc")
)
;省略一堆代码。
)
)
就是这一步让virtuoso卡死了,因为上面的AutoSnapLoop死循环了,因为AutoSnapLoop中while的条件始终是t,它就不会停止。必须让它发生一些事情return出去。
- 因此最终修改为:
procedure(AutoSnapLoop() ;绑定给一个快捷键,让它循环调用下面的AutoSnap()。
prog(()
while(t
if(AutoSnap() == "esc" then
return(nil)
)
)
)
)
procedure(AutoSnap()
prog((/*省略一堆变量*/)
unless(ep = enterPoint() ;当按下esc的时候enterPoint()会返回nil,因此程序得以正常的return出去。
return("esc")
)
;省略一堆代码。
)
)