【问题标题】:Ruby on Rails : Dependencies and NodesRuby on Rails:依赖项和节点
【发布时间】:2013-08-14 01:25:14
【问题描述】:

我有一个简单的问题需要解决。我有一些代码可以根据其他任务对任务进行分类。例如任务 A、B、C 和 D。但是,这些需要按依赖顺序排序。例如,任务 B 只能在任务 D 完成后才能完成。因此任务的顺序是:

  • 一个
  • D
  • B
  • C

我有一些 Python 代码,有没有办法让这些代码在 Rails 中工作(如正确的语法/方法)

class Node:
def __init__(self, name):
  self.name = name
  self.edges = []

def addEdge(self, node):
  self.edges.append(node)

【问题讨论】:

    标签: python ruby-on-rails dependencies nodes


    【解决方案1】:
    require 'set'
    
    class CircularDependenciesError < Exception
    end
    
    class Task
      attr_reader :name, :depends
    
      def initialize(task_name, dependencies=[])
        @name = task_name
        @depends = Set.new dependencies
      end
    
      def add_dependencies(*d)
        @depends.merge d 
      end
    
      def <=>(rhs)
        if depends.include?(rhs.name) and rhs.depends.include?(name) 
          raise CircularDependenciesError,
                "#{name} and #{rhs.name} depend on each other"
        elsif rhs.depends.include? name 
          -1
        elsif depends.include? rhs.name
          1
        else 
          0
        end
      end
    end
    
    tasks = [
      Task.new("A", ["B", "C"]),
      Task.new("B", ["C", "D"]),
    ]
    
    t = Task.new("C")
    t.add_dependencies("D", "E")
    tasks << t
    
    p tasks
    p tasks.sort
    
    --output:--
    [#<Task:0x000001018c0530 @name="A", @depends=#<Set: {"B", "C"}>>,
     #<Task:0x000001018c0350 @name="B", @depends=#<Set: {"C", "D"}>>,
     #<Task:0x000001018c01c0 @name="C", @depends=#<Set: {"D", "E"}>>]
    
    [#<Task:0x000001018c01c0 @name="C", @depends=#<Set: {"D", "E"}>>,
     #<Task:0x000001018c0350 @name="B", @depends=#<Set: {"C", "D"}>>,
     #<Task:0x000001018c0530 @name="A", @depends=#<Set: {"B", "C"}>>]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 2017-11-07
      相关资源
      最近更新 更多