def tainted?
      return @_value.tainted? if @_checked
      @_checked = true

      params_tainted =
        @_params.reduce(false) do |a, (_, param)|
          param.tainted? || a
        end

      return false unless params_tainted
      @_value.write call(@_accessor)
    end
def tainted?
      return @_value.tainted? if @_checked
      @_checked = true

      params_tainted =
        @_params.reduce(false) do |a, (_, param)|
          param.tainted? || a
        end

      return false unless params_tainted
      @_value.write call(@_accessor)
    end
Checks if the output value of the parameterized object has changed. If any
 of the input parameters have changed since last calling `#untaint!` the
 `#call` method will be evaluated in order to determine the state of the
 output value.

 Note that `#call` is only evaluated once after the object has been
 untainted. Subsequent calls to `#tainted?` will refer to the result of the
 first operation.

 @return [true] if the output value has changed since last calling
   `#untaint!`.
 @return [false] otherwise.