# File lib_ctrl/rucy/params.rb, line 954
    def set_arg_at(pos, value)
      arg_name, arg_label, arg_type, arg_default = arg_info_alist(self.name)[pos]
      case (arg_type)
      when :string, :password, :text
        case (value)
        when String, NilClass
          # nothing to do.
        else
          raise "not allowed as string: #{value.inspect}"
        end
      when :integer
        case (value)
        when Integer, NilClass
          # nothing to do.
        else
          raise "not allowed as integer: #{value.inspect}"
        end
      when :float
        case (value)
        when Float, NilClass
          # nothing to do.
        else
          raise "not allowed as float: #{value.inspect}"
        end
      when :regexp
        case (value)
        when Regexp, NilClass
          # nothing to do.
        else
          raise "not allowed as regexp: #{value.inspect}"
        end
      when :bool
        case (value)
        when TrueClass, FalseClass
          # nothing to do.
        else
          raise "not allowed as bool: #{value.inspect}"
        end
      when :select, :radio
        unless (arg_default.include? value) then
          raise "not included in allowed list: #{value.inspect}"
        end
      when :checkset
        case (value)
        when Hash
          key_check = Hash[*value.keys.map{|k| [ k, true ] }.flatten]
          for key, flag in arg_default
            unless (value.include? key) then
              raise "not allowed as checkset by lack of key: #{value.inspect}"
            end
            case (value[key])
            when TrueClass, FalseClass
              # nothing to do.
            else
              raise "not allowed as checkset by not boolean flag: #{value.inspect}"
            end
            key_check.delete(key)
          end
          unless (key_check.empty?) then
            raise "not allowed as checkset by excessive key: #{value.inspect}"
          end
        else
          raise "not allowed as checkset: #{value.inspect}"
        end
      else
        raise "unknown argument type: #{arg_type.inspect}"
      end
      name, label, type, default = arg_info_alist(self.name)[pos][0]
      @attrs['arguments'][name] = value
    end