# File tk/lib/tk/variable.rb, line 1655
def self.new(name, *args)
if name.kind_of?(TkVariable)
name.value = args[0] unless args.empty?
return name
end
name = name.to_s
v = nil
TkVar_ID_TBL.mutex.synchronize{
if v = TkVar_ID_TBL[name]
v.value = args[0] unless args.empty?
return v
else
(v = self.allocate).instance_eval{
@id = name
TkVar_ID_TBL[@id] = self
@var = @id
}
end
}
v.instance_eval{ initialize(name, *args) }
v
end
# File tk/lib/tk/variable.rb, line 1716
def initialize(varname, val=nil)
# @id = varname
# TkVar_ID_TBL[@id] = self
# @var = @id
@elem = nil
@def_default = false
@default_val = nil
@trace_var = nil
@trace_elem = nil
@trace_opts = nil
@type = nil
var = self
@element_type = Hash.new{|k,v| var.default_value_type }
# is an element?
if @id =~ /^([^(]+)\((.+)\)$/
# is an element --> var == $1, elem == $2
@var = $1
@elem = $2
end
# teach Tk-ip that @id is global var
INTERP._invoke_without_enc('global', @var)
begin
INTERP._invoke_without_enc('global', @id)
rescue => e
if @id =~ /^(.+)\([^()]+\)$/
# is an element --> varname == $1
INTERP._invoke_without_enc('global', $1)
else
fail e
end
end
if val
if val.kind_of?(Hash)
# assoc-array variable
self[''] = 0
self.clear
end
#s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&') + '"' #"
#s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&') + '"' #"
#INTERP._eval(Kernel.format('global %s; set %s %s', @id, @id, s))
#INTERP._set_global_var(@id, _toUTF8(_get_eval_string(val)))
self.value = val
end
end
# File tk/lib/tk/variable.rb, line 1680
def self.new_hash(name, *args)
if name.kind_of?(TkVariable)
unless name.is_hash?
fail ArgumentError, "already exist as a scalar variable"
end
name.value = args[0] unless args.empty?
return name
end
name = name.to_s
v = nil
TkVar_ID_TBL.mutex.synchronize{
if v = TkVar_ID_TBL[name]
unless v.is_hash?
fail ArgumentError, "already exist as a scalar variable"
end
v.value = args[0] unless args.empty?
return v
else
(v = self.allocate).instance_eval{
@id = name
TkVar_ID_TBL[@id] = self
@var = @id
}
end
}
INTERP._invoke_without_enc('global', name)
if args.empty? && INTERP._invoke_without_enc('array', 'exist', name) == '0'
v.instance_eval{ initialize(name, {}) } # force creating
else
v.instance_eval{ initialize(name, *args) }
end
v
end