ruby元编程

1
2
3
4
@unsolved_issues = Issue.unsolved_issues(@project.id, open_issues, issues, user_ids).group_by(&:assigned_to_id)
@otherproject_unsolve_issues = Issue.otherproject_unsolve_issues(@project.id, open_issues, issues, user_ids).group_by(&:assigned_to_id)
@project_issues = Issue.project_issues(@project.id, open_issues, issues, user_ids).group_by(&:assigned_to_id)
@other_project_issues = Issue.other_project_issues(@project.id, open_issues, issues, user_ids).group_by(&:assigned_to_id).group_by(&:assigned_to_id)
1
2
3
4
[:unsolved_issues, :otherproject_unsolve_issues, :project_issues, :other_project_issues].each do|option|
  value = Issue.send(option, @project.id, open_issues, issues, user_ids).group_by(&:assigned_to_id)
  instance_variable_set("@#{option}", value)
end

上面两段代码其实是等效的,但下面这段代码更易拓展和维护,使用了元编程动态派发send以及使用instance_variable_set为实例变量赋值,做到代码简洁易用

Ruby中的元编程

1.元编程常用方法

1
2
3
4
class Ruby
  def 
  end
end