2013-08-02 99 views
2

我努力學習的Lua傳遞參數給對象在Lua

我喜歡做這個(java代碼):

public class Nave { 
    private TextField tx; 
    public Nave (TextField tx){ 
     this.tx = tx; 
    } 
    public void setMessage (String s){ 
     this.tx.setText(s); 
    } 
} 

public class SomeClass { 
    public static void main (String args[]){ 
     Nave nave = new Nave (new TextField ("hello world")); 

    } 
} 

在Lua中;我如何將TextField傳遞給對象?

+0

在Java代碼中,您不是將對象傳遞給對象,而是將對象傳遞給構造函數。在Lua中,你必須自己完成對象定位,但是當你這樣做時,你通常將構造函數實現爲普通函數(返回構造對象);並且像其他任何函數一樣,將參數傳遞給該函數。 –

回答

1

Lua不直接擁有對象。 除了不能指定類型外,您可以使用與Java中相同的方式將它傳遞給函數。 只需指定一個函數接受一個對象,然後像Java那樣傳遞它。

這應該有助於與OO在Lua。 Lua Objects

Lua中的每個數據結構都是用一個表來實現的,所以你可以把所有的數據和函數放到一個表中,並且它的功能就像一個對象。

我也推薦閱讀整本書,Lua有一些你可能不習慣的東西。

function newAccount (initialBalance) 


local self = { 
    balance = initialBalance, 
    LIM = 10000.00, 
    } 

    local extra = function() 
    if self.balance > self.LIM then 
     return self.balance*0.10 
    else 
     return 0 
    end 
    end 

    local getBalance = function() 
    return self.balance + extra() 
    end 
    local withdraw = function (v) 
        self.balance = self.balance - v 
        end 

    local deposit = function (v) 
        self.balance = self.balance + v 
        end 

    return { 
    withdraw = withdraw, 
    deposit = deposit, 
    getBalance = getBalance 
    } 
end 

此功能爲初始平衡帶來一個參數。 然後它會創建一個表格來保存選項上的餘額和限制。 由於閉包,此表將始終保留,因爲作爲表返回的函數包含對它的引用。

自己保存的對象和函數extra被認爲是私有的,因爲它們不能在沒有函數調用的情況下訪問,而作爲表返回的方法是公共方法。

這非常接近java對象。 你只需要使用一些Lua規則來使它像一個一樣。即關閉和功能對象和表格。