似乎有很多支持在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'最好实例变量和总是比实例变量更有利。 –