Ruby Mechanize.get(url)有两种不同的语法-这有什么好处?

3
这两种语法有什么区别?
第一种有什么优势吗?
agent = Mechanize.new

# first
agent.get(url) do |page|
work
end

#second
page = agent.get(url)

我应该在什么情况下使用哪一个,以及为什么要这样做?

2个回答

2

调用 get 方法的这两种方式最终实现的功能是相同的。您可以根据自己的喜好使用任一种方式。第一种方式允许您传递一个块,可能有助于编写更简洁和/或易读的代码。选择哪种方式取决于您的需要。例如:

agent = Mechanize.new

agent.get(url) do |page|
   item = page.forms.first do |form|
     form.fieldname = "foo"
   end.submit
   # do something with item
end

比起......更易读
page = agent.get(url)
form = page.forms.first
form.fieldname = "foo"
item = agent.submit(form).body
#do something with item

同样的情况也适用于进行机械操作初始化时。我更喜欢…
@agent = Mechanize.new { |agent|
  agent.user_agent_alias = 'Mac Safari'
  agent.follow_meta_refresh = true
  agent.redirect_ok = true
}

to

@agent = Mechanize.new
@agent.user_agent_alias = 'Mac Safari'
@agent.follow_meta_refresh = true
@agent.redirect_ok = true

}


2

这是一种偏好问题,选择您认为更易于使用和阅读的样式即可。第一种方法的一个优点是您不必进行任何分配,但这并不是非常重要(除非您的代码在视图中,在这种情况下应避免分配 - 但这是另一个话题)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接