似乎有很多支持在rspec中使用let()
來初始化變量。什麼情況下使用實例變量(即@name
)取而代之?什麼時候使用實例變量比使用let()更有優勢?
7
A
回答
14
我總是喜歡讓實例變量的一對夫婦的原因:
實例變量生效的存在,當他們引用這 意味着,如果您在實例中的任何錯誤變量的拼寫然後 它會明確地引導您遇到一些問題,因爲新實例變量 已初始化爲零。但是在讓你得到NameError的情況下如果你 拼錯了。
而且你會之前 塊,這意味着之前塊將每次執行如果規範不使用 你初始化這些實例變量 規範甚至會被運行在初始化實例變量。下面給出的例子;
before do @user = Factory :user @movie = Factory :movie end it "should have user" do @user.should eq User.first end it "should have movie" do @movie.should eq Movie.first end
雖然所有的功能運行正常,但在第一規格和第二沒有用的@user
不使用的@movie
。
你也可以使用let with bang「!」 let!
,let
是懶惰的評估,如果你不叫它,將永遠不會實例化,使用let
來定義memoized助手,而let!
是在每個方法調用之前強制評估。
7
我贊成這個問題,但最後我自己回答了這個問題。
首先來描述差異
的let
方法中使用,直到在該測試中引用它不初始化該變量時 - 這使得它從@instance variables
不同,其是從開始初始化。
總的來說,沒有太大的缺陷。如果要確保let
對象已初始化,請使用@instance variables
。但另一方面,這可以與let!
完成相同,所以沒有明顯的理由使用@instance variable
。
總之,對我來說,有明顯理由使用@instance variable
超過let
,但沒有明顯的理由使用@instance variables
超過let!
@instance variables
需要更多的時間來加載,並通過他們,能導致這可以通過使用let
或let!
你可以看看這兩個答案,以及避免在代碼中不必要的複雜性,也許它會給你一些更多的信息:
RSpec: What is the difference between let and a before block?
相關問題
- 1. 使用HttpApplication比HttpApplication有什麼優勢?
- 2. 使用Redux比React有什麼優勢?
- 3. 使用SVN比CVS有什麼優勢?
- 4. 使用javacv比opencv有什麼優勢?
- 5. 使用BaseAdapter比ArrayAdapter有什麼優勢?
- 6. 使用chiliproject比redmine有什麼優勢?
- 7. 使用POCO比DataTables有什麼優勢?
- 8. 什麼時候我們使用let rec?
- 9. 什麼時候你不想使用@synthesized實例變量?
- 10. 在TypeScript中,什麼時候使用「let」,什麼時候使用「const」?
- 11. 使用訪問器對IB元素實例有什麼優勢?
- 12. 變量變量:什麼時候有用?
- 13. 在HTML中,使用div比使用表有什麼優勢?
- 14. 使用arrayWithCapacity比使用數組有什麼優勢?
- 15. 在使用OpenGL時,C++比C#有什麼優勢?
- 16. 使用靜態全局工作變量有什麼優勢嗎?
- 17. 對於變長函數,使用tf.train.SequenceExample比tf.train.Example更有什麼優勢?
- 18. 什麼時候應該使用let {},什麼時候只是簡單的!= null
- 19. 使用scrapyd有什麼優勢?
- 20. Hudson vs使用shellcript有什麼優勢?
- 21. 使用Python Virtualbox API有什麼優勢?
- 22. 使用迭代器有什麼優勢?
- 23. 使用NSOutputstream有什麼優勢?
- 24. 使用SproutCore框架有什麼優勢?
- 25. 爲什麼不能使用RSpec的「let」方法來設置實例變量?
- 26. 與Ruby相比,在String中使用StringIO有什麼優勢?
- 27. 使用UTF-8比UTF-16有什麼優勢?
- 28. 使用Builder比常規xml文件有什麼優勢?
- 29. 您認爲使用RSpec``double'比'OpenStruct.new`有什麼優勢?
- 30. 使用城市飛艇比C2DM有什麼優勢
也許他想說的話是這樣的:在所有點,'let'最好實例變量和總是比實例變量更有利。 –