我正在阅读 Avdi在 Rails 上的对象书,但不理解部分示例代码。
他创建了一个类,我猜是出于依赖注入的目的:
class Blog
# ...
attr_writer :post_source
# ...
private
def post_source
@post_source ||= Post.public_method(:new)
end
end
然后他写了以下规范
# spec/models/blog_spec.rb
require 'ostruct'
describe Blog do
# ...
describe "#new_post" do
before do
@new_post = OpenStruct.new
@it.post_source = ->{ @new_post }
end
it "returns a new post" do
@it.new_post.must_equal @new_post
end
it "sets the post's blog reference to itself" do
@it.new_post.blog.must_equal(@it)
end
end
end
我不明白他为什么使用@it.post_source = ->{ @new_post }
他为什么不直接使用@it.post_source = OpenStruct.public_method(:new)
类似于他的博客类代码的东西@post_source ||= Post.public_method(:new)
是否有一个原因?