2016-11-04 37 views
2

我從教育網站上的教程學習。問題是,視頻是從2009年(Ruby 1.8),並且一些信息可能已經過時。在最新版本的Ruby中,有訪問實例變量所需的getter和setter方法嗎?

教員說,你需要同時使用getter/setter方法來訪問實例變量,但另有一個簡單的測試表明:

class Carnivore 
    def noise(noise) 
    @noise = noise 
    end 
end 

carnivore = Carnivore.new 
puts noise = "roar" #will output "roar" 

我不能確定我是否做錯了我的setter方法它讓我訪問實例變量,理想情況下不應該。令我感到困惑的是,我的導師向我展示了一個沒有getter和setter方法的程序。

在我看來,上述情況是因爲a)我的setter方法設置不當,或者b)Ruby中的版本更改允許設置setter,然後在沒有getter的情況下訪問。

所以我想我的問題是,你需要getter和setter方法來訪問實例變量?

回答

3
puts noise = "roar" 

此行無關與前行 - 不與食肉類,而不是與實例食肉動物。它創建一個局部變量噪音(並打印它)。先從

puts carnivore.noise 
2

所以嘗試,讓我們開始,起初,當我們談論setter它應該這樣定義:

def noise=(arg) 
    @noise = arg 
end 

getter

def noise 
    @noise 
end 

所以,結果是:

class Carnivore 
    def noise=(noise) 
     @noise = noise 
    end 

    def noise 
     @noise 
    end 
end 

在你的榜樣,您創建的class Carnivoreinstance後=調用方法:放可變noise

的定義