2015-10-28 50 views
2

我並不完全知道如何谷歌這個問題,所以我來這裏舉一個例子。我看有類似下面的摘錄硒腳本:@ var name在Ruby腳本之前的符號

def setup 
    @starting_url = "https://www.example.com" 
    @restricted_url = "https://www.example.com/restricted" 
    @user_email = "[email protected]" 
    @user_password = "notarealpassword" 
    @headless_mode = false 
    @page_timeout = 15 # seconds 
    @log_file = 'log/development.log' 
    @lineup_file = 'data/lineup1.csv' 
    ... more code 
end 

我的問題是,爲什麼每一個變量在這裏得到前面加上一個@符號?這種方法不是一個類的一部分。它正在全球範圍內編寫。我明白這些變量在顯式類的情況下具有@符號的意義,但是在這裏呢?

+0

他們實例瓦爾他們正在運行中,這裏硒。 Selenium腳本不會孤立運行:http://elementalselenium.com/tips/7-use-a-page-object –

回答

4

這些變量成爲main對象範圍內的實例變量。它們將在全球範圍內定義的其他方法中提供。在全局範圍內的方法中定義的局部變量只要方法返回就會超出範圍。

插圖:環境

def foo 
    lvar = 1 
    @ivar = 2 
end 

def bar 
    puts @ivar # will print 2 after foo() is called 
    puts lvar # will throw NameError 
end 

@ivar # => nil 
foo # initializes @ivar 
@ivar # => 2 
bar # prints 2, throws NameError 
lvar # throws NameError 
+0

很酷,我明白了。所以作者只是利用在整個'main'對象範圍內的範圍來作爲在我的腳本的其餘部分中使用全局變量的一種方式。 – randombits

+0

是的。這些絕對是羊皮服裝的全球變數。 –