Dường như có rất nhiều hỗ trợ để sử dụng let()
trong rspec để khởi tạo biến. Một số trường hợp sử dụng các biến mẫu (ví dụ: @name
) là gì?Khi nào sử dụng các biến cá thể có lợi thế hơn việc sử dụng let()?
Trả lời
Tôi luôn luôn thích để cho một biến Ví dụ cho một vài lý do:
biến Instance đi vào sự tồn tại khi họ nhận được tham chiếu mà có nghĩa rằng nếu bạn thực hiện bất kỳ sai lầm trong trường hợp biến chính tả rồi nó chắc chắn sẽ dẫn bạn đến một số vấn đề như một biến cá thể mới được khởi tạo thành không. Nhưng để cho bạn sẽ nhận được NameError nếu bạn viết sai chính tả.
Hơn nữa bạn sẽ được khởi tạo các biến Ví dụ trước khi khối, có nghĩa là trước khi khối sẽ được thực hiện mỗi khi một spec sẽ chạy ngay cả khi thông số này không sử dụng các biến dụ bạn đã khởi tạo. ví dụ dưới đây;
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
Mặc dù tất cả các thông số kỹ thuật chạy tốt nhưng có được không sử dụng của @movie
trong spec đầu tiên và không sử dụng @user
thứ hai.
Bạn cũng có thể sử dụng let with bang "!" let!
, let
được đánh giá lazily và sẽ không bao giờ được khởi tạo nếu bạn không gọi nó, sử dụng let
để xác định trình trợ giúp ghi nhớ, trong khi let!
được đánh giá mạnh trước mỗi cuộc gọi phương thức.
Tôi đã ưu tiên câu hỏi này, nhưng cuối cùng tôi tự trả lời câu hỏi đó.
Đầu tiên để mô tả sự khác biệt
Phương pháp let
khi sử dụng nó không khởi tạo biến cho đến khi nó được tham chiếu trong các thử nghiệm - mà làm cho nó khác với @instance variables
được khởi tạo từ đầu.
Nói chung không có sự khác biệt lớn. Sử dụng @instance variables
khi bạn muốn chắc chắn rằng đối tượng let
được khởi tạo. Nhưng mặt khác, điều này có thể được thực hiện tương tự với let!
, vì vậy không có lý do rõ ràng để sử dụng @instance variable
.
Để kết luận, với tôi, đó là rõ ràng lý do để sử dụng @instance variable
qua let
, nhưng không có lý do rõ ràng để sử dụng @instance variables
qua let!
@instance variables
mất nhiều thời gian để tải, và bằng cách sử dụng chúng, có thể dẫn đến sự phức tạp không cần thiết trong mã mà có thể tránh được bằng cách sử dụng let
hoặc let!
bạn có thể có một cái nhìn tại hai câu trả lời này là tốt, có thể nó sẽ cung cấp cho bạn một số thông tin:
RSpec: What is the difference between let and a before block?
- 1. Khi nào sử dụng let và if-let trong Clojure
- 2. Lợi thế của việc sử dụng arrayWithCapacity so với việc sử dụng mảng là gì?
- 3. Khi nào sử dụng các biến mẫu và khi nào sử dụng các thuộc tính
- 4. Lợi ích của việc sử dụng enums qua trực tiếp sử dụng các loại tích phân?
- 5. lợi thế của việc sử dụng giao diện là gì
- 6. Khi nào cần sử dụng giao diện và khi nào cần sử dụng các chức năng bậc cao hơn?
- 7. Có lợi thế nào khi sử dụng bộ chọn rất cụ thể trong CSS không?
- 8. Việc sử dụng/lợi thế của việc sử dụng CommandBehavior.CloseConnection trong ExecuteReader()
- 9. Lợi thế của việc sử dụng Thread.Start vs QueueUserWorkItem
- 10. Có lợi thế nào khi sử dụng các khóa @array thay vì 0 .. $ # array không?
- 11. Có lợi thế nào khi sử dụng các khối trên các hàm trong Objective-C?
- 12. Có lợi ích gì khi sử dụng @staticmethod không?
- 13. Sử dụng bảo vệ trong let .. trong các biểu thức
- 14. node.js - những lợi thế của việc sử dụng ngọc bích
- 15. Có tốt hơn khi sử dụng các số nguyên làm biến số vòng lặp không?
- 16. Có lợi ích gì khi sử dụng HtmlHelper trong MVC?
- 17. Có lợi thế nào khi sử dụng một lớp Python không?
- 18. Chính xác là lợi ích của việc sử dụng Punjab
- 19. những lợi thế khi sử dụng scrapyd là gì?
- 20. Có lợi thế nào khi sử dụng AND và OR trên && và || trong PHP?
- 21. Một số lợi thế/bất lợi của việc sử dụng SQLDataReader là gì?
- 22. Lợi ích/lợi thế của việc sử dụng Python 3 là gì?
- 23. Những lợi thế khi sử dụng Qt là gì?
- 24. Có lợi ích thực sự khi sử dụng J # không?
- 25. Lợi ích của việc sử dụng epoll_create1() thay vì epoll_create()
- 26. Có lợi thế nào khi sử dụng --no-metadata trong bản sao git svn không?
- 27. Có lợi thế nào khi sử dụng các tham số const với một loại thứ tự không?
- 28. Làm thế nào để sử dụng đa xử lý với các cá thể lớp trong Python?
- 29. Khi nào sử dụng các tệp .xcconfig
- 30. lợi thế, bất lợi và khó khăn khi viết một ngôn ngữ để sử dụng .NET
Có lẽ ông muốn nói như thế này: tại tất cả các điểm, 'let' là một lợi thế cho các biến dụ và luôn luôn là thuận lợi hơn so biến ví dụ. –