# File lib_ctrl/rucy/params.rb, line 1000
    def set_arg_at(pos, value)
      arg_info = arg_info_alist(self.name)[pos]
      case (arg_info[1])
      when :string, :password, :text
        case (value)
        when String, NilClass
          # nothing to do.
        else
          raise "not allowed as string: #{value.inspect}"
        end
      when :number
        case (value)
        when Integer, NilClass
          # nothing to do.
        else
          raise "not allowed as integer: #{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_info[2].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_info[2]
            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_info[1]}"
      end
      @attrs['arguments'][pos] = value
    end