亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

lua中的泛型for用法為什么會直接使用talbe?

lua中的泛型for用法為什么會直接使用talbe?

明月笑刀無情 2019-05-31 07:02:58
lua中的泛型for用法為什么會直接使用talbe?
查看完整描述

2 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

原因如下:

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-06-01
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

泛型方法:
  是否擁有泛型方法,與其所在的類是否泛型沒有關系。要定義泛型方法,只需將泛型參數列表置于返回值前。如:
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-06-01
  • 2 回答
  • 0 關注
  • 664 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號