2016-08-15 172 views
-2

所以,我有以下設置如何調用一個類的實例,實例方法從不同的類

class foo 
    :attr_accessor :textBoxInFoo 

    @textBoxInFoo 

    def appendText 
     //appends text to textBoxInFoo 
    end 

    def getLastPartOfText 
     //gets the last line of text in textBoxInFoo 
    end 
end 

class bar 
    def UseFoo 
     //Declares instance of textBoxInFoo 
    end 
end 

class snafu 
    def runInBackground 
     //Needs to read and write from instance of textBoxInFoo in bar class 
    end 
end 

什麼,我沒有完全理解是怎麼做我需要在runInBackground做爲了讓它閱讀和寫入textBoxInFoo,我一直在閱讀實例和類方法的各種解釋,而且他們中沒有人真的點擊過我,所以我想知道是否有人知道我搞亂了什麼。

+2

這是有點混亂,你一直在談論textBoxInFoo的實例,但似乎沒有這樣的類。這些類如何相互關聯?此外,你的代碼是不是有效的紅寶石 - 這可能與你的問題相切,但它絕對是一個分心 –

+0

通常,你創建一個類的實例(即現在是該類的一個對象),該實例可以使用實例變量和該類的方法。在你的情況下,你試圖訪問另一個類'snafu'中的實例變量。但爲了訪問'@ textBoxInFoo',你應該首先實例化一個類'foo'的實例。因此,例如,在'runInBackground'中,您將創建一個新的實例'text = foo.new',然後您可以訪問實例變量'text.textBoxInFoo'。 –

+0

在'RunInBackground'中,您可以使用'Foo.new.textBoxInFoo'創建一個到另一個對象的本地引用。如果你不想初始化'Foo',那麼你可以創建一個'Foo :: TextBoxInFoo'常量。順便說一下,你的類名需要以大寫字母開頭。 –

回答

1

這是如何創建用戶對象並將其作爲參數發送給學生對象的一個​​小例子。 run()方法調用用戶的運行方法。

class User 

    attr_accessor :name 
    def initialize(name) # it is similar to constructor 
    @name = name 
    end 

    #run method 
    def run 
    puts "I am running" 
    end 

    #getter for name 
    def get_name 
    @name 
    end 

    #setter for name 
    def set_name=(name) 
    @name = name 
    end 
end 


class Student 

    attr_accessor :obj 
    def initialize(obj) 
    @obj = obj 

    end 

    def run 
    obj.run 
    puts "inside of Student" 
    end 
end 

user = User.new("John") 
stud = Student.new(user) 
stud.run # shows I am running 
     #  inside of student 
相關問題