3

这些语法有什么区别?第一个比第二个有什么好处吗?

agent = Mechanize.new

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

#second
page = agent.get(url)

我应该在何时以及为什么使用哪一个?

4

2 回答 2

2

这是一个偏好问题,选择任何你觉得更好用和阅读的风格。第一个的优点是您不必进行任何分配,但这并不重要(除非您的代码在视图中,您应该避免分配 - 但这是另一个主题)

于 2012-07-26T13:18:39.110 回答
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
}

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

}

于 2012-07-26T21:50:21.733 回答