【疑惑】为什么用于设置环境的table语法较特殊?
lua吧
全部回复
仅看楼主
level 13
比如
setfenv(f, {a=10})
中,a=10是一个赋值语句,而不像通常的table那样,=左边是key,右边是value
2016年04月04日 10点04分 1
level 10
??
2016年04月04日 13点04分 2
求大神指教
2016年04月04日 15点04分
@HarrySpiderman 这就是一个表[黑线]
2016年04月06日 15点04分
@奇诺城堡 有了上述的设置后,a== 10就为真了;但是其他地方出现表: t={a=10}; 并不能得出a== 10,而是只能得出t.a == 10
2016年04月07日 01点04分
@HarrySpiderman 你是说在f中a==10吧,这正是设置环境的原意啊,本来默认的全局环境是在_G中,你调用setfenv之后你就改变了这个环境
2016年04月07日 02点04分
level 11
setfenv是设置环境,将{a=10}这个表设置为环境[滑稽],实际上你的环境_G其实就是个表[滑稽],{a=10}也是个表,它替换了这个_G所以 在新的环境里 a=10是必然的[滑稽]因为在环境f里a=10,你又继承呸,你使用了这个环境f
2016年04月07日 12点04分 3
然而{a=10}中的a本质上不是字符串"a"么?而作为全局变量的a则是未定义的。
2016年04月07日 14点04分
@HarrySpiderman 这个a是key a 犹如那个f.a是10 实际上我也没测试过这么搞[滑稽]那个第一个参数f是表示环境试用的范围
2016年04月07日 15点04分
@HarrySpiderman 你可以试试k={k=1}就知道这是key了[滑稽]
2016年04月07日 15点04分
level 5
{a=10}是个普通的表定义
2016年04月07日 13点04分 4
level 13
再极端一点,普通的table可以写成{2=10},那么用这个table来设置环境的话,难道2就等于10了吗?
2016年04月07日 14点04分 5
2是常量,不会从环境里取的
2016年04月07日 17点04分
level 6
在使用某个全局变量(例如说a)的时候,可以视为被自动翻译成了在用_G.a
2016年04月12日 02点04分 6
也就是说,a=10也是一个key=value的语法,不是特殊的。在_G这个表里a这个key的value就是10,所以_G.a就等于10,而在这个环境中出现的全局变量a都相当于_G.a,所以a等于10。
2016年04月12日 02点04分
@hhhgyu 所以可以说这是一种非常巧的现象吧?
2016年04月12日 03点04分
@HarrySpiderman 你说是什么东西巧
2016年04月12日 03点04分
@hhhgyu 因为完全可以把设置环境的table中的语句看成是赋值语句,只要key是合法的标识符
2016年04月12日 03点04分
1