From 71df1890c7a371636b111a29fc49dd6f205f29b5 Mon Sep 17 00:00:00 2001 From: Fernando Correa de Oliveira Date: Tue, 12 Jun 2018 22:06:19 -0300 Subject: [PATCH] Add README --- README.md | 39 +++++++++++++++++++++++++++++++++++++-- lib/OrderedHash.pm6 | 4 ++-- t/02-ordered-hash.t | 4 ++++ 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4edf15b..f3fffa1 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,47 @@ NAME ==== -OrderedHash - blah blah blah +OrderedHash - A hash that you specify the possible keys and theirs order SYNOPSIS ======== - use OrderedHash; +```perl6 +use OrderedHash; + +my %oh1 does OrderedHash = b => 2, c => 3, a => 1; + +say %oh1.keys; # (a b c) +say %oh1.values; # (1 2 3) +say %oh1.kv; # (a 1 b 2 c 3) +say %oh1.pairs; # (a => 1 b => 2 c => 3) + +my %oh2 does OrderedHash[Int] = b => 2, a => 1; + +say %oh2.keys; # (a b) +say %oh2.values; # (1 2) +say %oh2.kv; # (a 1 b 2) +say %oh2.pairs; # (a => 1 b => 2) + +%oh2 = 3; +say %oh2; # {a => 1, b => 2, c => 3} + +# %oh2 = "error"; # dies + +my %oh3 does OrderedHash[:keys] = b => 2, c => 1, a => 3; + +say %oh3.keys; # (c b a) +say %oh3.values; # (1 2 3) +say %oh3.kv; # (c 1 b 2 a 3) +say %oh3.pairs; # (c => 1 b => 2 a => 3) + +my %oh4 does OrderedHash[Str, :keys] = b => "b", c => "a", a => "c"; + +say %oh4.keys; # (c b a) +say %oh4.values; # (a b c) +say %oh4.kv; # (c a b b a c) +say %oh4.pairs; # (c => a b => b a => c) +``` DESCRIPTION =========== diff --git a/lib/OrderedHash.pm6 b/lib/OrderedHash.pm6 index abe1ce3..574baaf 100644 --- a/lib/OrderedHash.pm6 +++ b/lib/OrderedHash.pm6 @@ -1,7 +1,7 @@ -unit role OrderedHash[\Type = Any, :@keys = flat("0".."9", "a".."z")] does Associative; +unit role OrderedHash[::T \Type = Any, :@keys = flat("0".."9", "A".."Z", "a".."z")] does Associative; has Mu:U $!of = Type; has Str @!keys = @keys; -has @!values is default(Type); +has T @!values is default(Type); has UInt %!map = @keys.kv.reverse; method STORE(*@pairs, :$initialize --> OrderedHash:D) { diff --git a/t/02-ordered-hash.t b/t/02-ordered-hash.t index acb9d06..c90af29 100644 --- a/t/02-ordered-hash.t +++ b/t/02-ordered-hash.t @@ -42,4 +42,8 @@ is %oh2.kv, <2 1 3 2 1 3>; is %oh2.pairs, (2 => 1, 3 => 2, 1 => 3); +my %oh3 does OrderedHash[Int]; + +dies-ok {%oh3 = "string"}; + done-testing