Function 我可以为luashell提示符运行函数吗?

Function 我可以为luashell提示符运行函数吗?,function,lua,command-prompt,Function,Lua,Command Prompt,我可以使用\u prompt=“>”设置提示,但是我可以每次更新提示吗 我试过这个,但不起作用: i=0 功能公司 i=i+1 返回i 结束 _提示符=公司 这将显示\u提示符,但与此无关: 对于k,v成对(_G)do 印刷品(k) 结束 如果全局变量_prompt的值是字符串,则主提示为该值;否则,将使用默认提示 您为\u提示符分配了一个函数 我试过了 \u提示符={no=0};setmetatable(_PROMPT,{u tostring=function(self)self.no=

我可以使用
\u prompt=“>”
设置提示,但是我可以每次更新提示吗

我试过这个,但不起作用:

i=0
功能公司
i=i+1
返回i
结束
_提示符=公司
这将显示
\u提示符
,但与此无关:

对于k,v成对(_G)do
印刷品(k)
结束
如果全局变量_prompt的值是字符串,则主提示为该值;否则,将使用默认提示

您为
\u提示符
分配了一个函数

我试过了

\u提示符={no=0};setmetatable(_PROMPT,{u tostring=function(self)self.no=self.no+1;return tostring(self.no)“>”end})
,但运气不好,尽管每次我键入
=\u提示符
时,
=\u提示符
都会递增

UPD但这是可以做到的!在Lua邮件列表中,我被建议使用

setmetatable({u ENV,{{u index=function(t,k),如果k=''u PROMPT',则t.。{u N=(t.'u N或0)+1;返回t.。{u N..'>'end})
它起作用了。这实际上是一种在更深层意义上覆盖任何全局变量的方法,而不仅仅是给它分配一个新值,或者使一组全局变量实际上无限大

您可以使用一行程序在交互模式下启动Lua:

lua-i-e“setmetatable(_ENV,{u index=function(t,k),如果k=''u PROMPT',则t.。_N=(t.\u N或0)+1;返回t.。_N..>'end}”

我用
debug.sethook()找到了一个方法
听起来有点奇怪,但其实很简单;-)
我们走吧

# /usr/bin/lua -i
Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio
> debug.sethook(function(...) _PROMPT=os.date('%H:%M:%S # ') end,'r')
10:49:42 # -- Hiting ENTER some times
10:51:00 #
10:51:01 #
10:51:05 #
(使用Lua 5.3.5和测试的5.4完成-应使用5.1但未测试)
'r'
的意思是:在每次返回时开火


…非常有趣并且保持健康。

不幸的是,
\u提示符
被包含在k,v成对(_G)do print(k)end
的输出中的唯一原因是我自己设置的。因此,我无法使用此方法找到任何特殊变量