ruby " />

扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

Ruby涓殑DSL鎬庝箞瀹炵幇

扬州沐宇科技
2024-04-10 18:02:05
ruby

鍦≧uby涓紝DSL锛圖omain Specific Language锛夊彲浠ラ€氳繃瀹氫箟涓€涓被鎴栨ā鍧楁潵瀹炵幇銆侱SL閫氬父浼氫娇鐢≧uby鐨勮娉曞拰璇硶绯栨潵鎻愪緵涓€绉嶆洿鍏疯〃鐜板姏鍜屾槗鐢ㄦ€х殑璇█灞傦紝浠ヤ究浜庝娇鐢ㄨ€呮洿鏂逛究鍦版弿杩板拰鎿嶄綔鐗瑰畾棰嗗煙鐨勯棶棰樸€?/p>

涓嬮潰鏄竴涓畝鍗曠殑绀轰緥锛屾紨绀哄浣曞湪Ruby涓垱寤轰竴涓狣SL鐢ㄤ簬鎻忚堪涓€涓畝鍗曠殑瑙勫垯寮曟搸锛?/p>

class RuleEngineDSL
  def initialize
    @rules = []
  end

  def rule(name, &block)
    rule = Rule.new(name)
    rule.instance_eval(&block)
    @rules << rule
  end

  def run
    @rules.each do |rule|
      if rule.condition
        rule.action.call
      end
    end
  end
end

class Rule
  attr_accessor :condition, :action

  def initialize(name)
    @name = name
  end

  def when(&block)
    @condition = block
  end

  def then(&block)
    @action = block
  end
end

engine = RuleEngineDSL.new

engine.rule "Rule 1" do
  when { true }
  then { puts "Rule 1 is triggered" }
end

engine.rule "Rule 2" do
  when { false }
  then { puts "Rule 2 is triggered" }
end

engine.run

鍦ㄨ繖涓ず渚嬩腑锛屾垜浠畾涔変簡涓€涓猂uleEngineDSL绫诲拰涓€涓猂ule绫汇€傚湪RuleEngineDSL绫讳腑锛屾垜浠畾涔変簡rule鏂规硶鏉ュ垱寤轰竴涓鍒欙紝骞堕€氳繃浣跨敤instance_eval鏂规硶鏉ユ墽琛宐lock涓殑DSL浠g爜銆傚湪Rule绫讳腑锛屾垜浠畾涔変簡when鏂规硶鍜宼hen鏂规硶鏉ヨ缃鍒欑殑鏉′欢鍜屽姩浣溿€?/p>

閫氳繃杩欑鏂瑰紡锛屾垜浠彲浠ヤ娇鐢―SL璇硶鏉ユ弿杩颁竴缁勮鍒欙紝骞堕€氳繃璋冪敤run鏂规硶鏉ユ墽琛岃鍒欏紩鎿庛€傝繖鏍风殑DSL鍙互浣夸唬鐮佹洿鍔犳槗璇诲拰鏄撶敤锛屽悓鏃朵篃鏂逛究浜嗙敤鎴峰瑙勫垯寮曟搸鐨勬搷浣滃拰瀹氬埗銆?/p>

扫码添加客服微信