class Foo
 def initialize
  @hash = {}
 end
 def []= (key, value)
  @hash[key] = value if yield(key)
 end
 def [] (key)
  @hash[key]
 end
end

foo = Foo.new
pr = proc{|k| k.is_a?(Symbol) ? true : false}

foo.__send__("[]=", "a", "b", &pr)
foo.__send__("[]=", :a, :b, &pr)

p foo["a"] #=> nil
p foo[:a] #=> :b