为了账号安全,请及时绑定邮箱和手机立即绑定

lua中的泛型for用法为什么会直接使用talbe?

lua中的泛型for用法为什么会直接使用talbe?

开心每一天1111 2019-04-14 10:08:58
lua中的泛型for用法为什么会直接使用talbe?
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

原因如下:

for i,v in pairs(t) do ... end,这其实只是泛型for的普通用法,for有2种用法第一种是 for i = 1,10,1 do print(i) end 这种 当计数器用的。

第二种是泛型for,for a,b,c,d,e in fun1(para) do ... end。

等价于,local fun2 = fun1(para),while true do a,b,c,d,e = fun2(), if a then,break else ......(这里就是上面写在do里面的内容) end,这里要求的就是fun1的返回值必须是一个迭代函数 不然就计算不完了。

lua中的泛型for直接使用talbe的原因:

当我在工作中使用lua 进行开发时,发现在lua 中有4种方式遍历一个table ,当然,从本质上来说其实都一样,只是形式不同。

XXX 15. end 前两种是泛型遍历,后两种是数值型遍历。当然你还会说lua 的table 遍历还有很多种方法啊,没错,不过最常见的这些遍历确实有必要弄清楚。

这四种方式各有特点,由于在工作中我几乎每天都会使用遍历table 的方法,一开始也非常困惑这些方式的不同,一段时间后才渐渐明白,这里我也是把自己的一点经验告诉大家,对跟我一样的lua 初学者也许有些帮助(至少当初我在写的时候在网上就找了很久,不知道是因为大牛们都认为这些很简单,不需要说,还是因为我笨,连这都要问)。

准确来说lua 中的table 更加像是C++中的map ,通过Key 对应存储Value ,但是并非顺序来保存key-value 对,而是使用了hash 的方式,这样能够更加快速的访问key 对应的value ,我们也知道hash 表的遍历需要使用所谓的迭代器来进行,同样,lua 也有自己的迭代器,就是上面4种遍历方式中的pairs 和ipairs 遍历。

但是lua 同时提供了按照key 来遍历的方式(另外两种,实质上是一种),正式因为它提供了这种按key 的遍历,才造成了我一开始的困惑,我一度认为lua 中关于table 的遍历是按照我table 定义key 的顺序来的。



查看完整回答
反对 回复 2019-04-15
?
郎朗坤

TA贡献1921条经验 获得超9个赞

泛型方法:
  是否拥有泛型方法,与其所在的类是否泛型没有关系。要定义泛型方法,只需将泛型参数列表置于返回值前。如:
public class ExampleA {
 public <T> void f(T x) {
  System.out.println(x.getClass().getName());
 }
 public static void main(String[] args) {
  ExampleA ea = new ExampleA();
  ea.f(" ");
  ea.f(10);
  ea.f('a');
  ea.f(ea);
 }
}
输出结果:
java.lang.String
java.lang.Integer
java.lang.Character
ExampleA
  使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。
  需要注意,一个static方法,无法访问泛型类的类型参数,所以,若要static方法需要使用泛型能力,必须使其成为泛型方法。




查看完整回答
反对 回复 2019-04-15
  • 2 回答
  • 0 关注
  • 675 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信