Class: Hashery::Stash

### Home Classes Methods

### In Files

- lib/hashery/key_hash.rb

### Parent

Hashery::CRUDHash

### Methods

- ::new

### Files

- LICENSE.txt
- NOTICE.txt

### Class/Module Index

Quicksearch

- Hashery
- Hashery::Association
- Hashery::Association::Kernel
- Hashery::CRUDHash
- Hashery::CastingHash
- Hashery::Dictionary
- Hashery::FuzzyHash
- Hashery::IniHash
- Hashery::KeyHash
- Hashery::LRUHash
- Hashery::LinkedList
- Hashery::LinkedList::Node
- Hashery::OpenCascade
- Hashery::OpenHash
- Hashery::OrderedHash
- Hashery::PathHash
- Hashery::PropertyHash
- Hashery::QueryHash
- Hashery::Stash
- Hashery::StaticHash
- Hash

No matching classes.

# Hashery::Stash

The KeyHash class is a Hash class which accepts a block for normalizing keys.

The KeyHash class is essentially the same as a normal Hash. But notice the significant distinction of indifferent key access.

    s = KeyHash.new
    s[:x] = 1
    s[:x]       #=> 1
    s['x']      #=> 1

We can see that internally the key has indeed been converted to a String.

    s.to_h      #=> {'x'=>1 }

By default all keys are converted to strings. This has two advantages over a regular Hash is many usecases. First it means hash entries have indifferent access. `1`, `"1"` and `:1` are all equivalent --any object that defines `#to_s` can be used as a key. Secondly, since strings are garbage collected so will default KeyHash objects.

But keys can be normalized by any function. Theses functions can be quite unique.

    h = KeyHash.new(0){ |k| k.to_i }
    h[1.34] += 1
    h[1.20] += 1
    h[1.00] += 1
    h  #=> { 1 => 3 }

### Public Class Methods

new(*default, &block) click to toggle source

Unlike a regular Hash, a KeyHash's block sets the `key_proc` rather than the `default_proc`.

    # File lib/hashery/key_hash.rb, line 44
    def initialize(*default, &block)
      super(*default)
      @key_proc = block || Proc.new{ |k| k.to_s }
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.