class TdlSpace::DefArrayChain

Attributes

belong_to_module[RW]
chain[RW]

Public Class Methods

new(belong_to_module) click to toggle source
# File lib/tdl/sdlmodule/sdlmodule_arraychain.rb, line 18
def initialize(belong_to_module)
    @chain = []
    @belong_to_module = belong_to_module
end

Public Instance Methods

-(name) click to toggle source
# File lib/tdl/sdlmodule/sdlmodule_arraychain.rb, line 32
def -(name)
    raise TdlError.new(" Base Class cant define anything!!!")
    # if name.is_a? StringBandItegration
    #     raise TDLError.new("简化定义模式不允许传入 StringBandItegration 类型")
    # end
end
[](*a) click to toggle source
# File lib/tdl/sdlmodule/sdlmodule_arraychain.rb, line 23
def [](*a)
    if a.empty?
        raise TdlError.new("参数不能为空")
    end
    new_dla = self.class.new(@belong_to_module)
    new_dla.chain = @chain + a
    new_dla
end
check_name(name) click to toggle source
# File lib/tdl/sdlmodule/sdlmodule_arraychain.rb, line 39
def check_name(name)
    check_topmodule_method(name)
    if name.is_a? StringBandItegration
        raise TdlError.new("简化定义模式不允许传入 StringBandItegration 类型")
    end
end
check_topmodule_method(name) click to toggle source

简化模式定义时 打通topmodule 和 itgt 方法连接,需要topmodule没有定义同名方法

# File lib/tdl/sdlmodule/sdlmodule_arraychain.rb, line 73
def check_topmodule_method(name)
    if $_implicit_curr_itgt_.slast.respond_to?('top_module') && $_implicit_curr_itgt_.slast.top_module.respond_to?(name)
        raise TdlError.new("TopModule[#{$_implicit_curr_itgt_.slast.top_module.module_name}] 已经定义了方法 [#{name}],Itgt 不能定义新方法#{name},以免发生混淆")
    end
end
method_missing(name,*args,&block) click to toggle source
Calls superclass method
# File lib/tdl/sdlmodule/sdlmodule_arraychain.rb, line 56
def method_missing(name,*args,&block)
    ClassHDL::AssignDefOpertor.with_rollback_opertors(:old) do 
        if name !~ /\w+/
            super 
        end

        if args && args.any? && args[0].is_a?(Hash)
            args[0].each do |key,value|
                self.instance_variable_set("@#{key}",value)
            end
        end

        self - name
    end
end
to_inp(name) click to toggle source
# File lib/tdl/sdlmodule/sdlmodule_arraychain.rb, line 46
def to_inp(name)
    check_name(name)
    if $_implicit_curr_itgt_.slast
        yname = name.to_inp($_implicit_curr_itgt_.last)
    else 
        yname = name 
    end
    return yname 
end