Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
class X < Hash ... how do I do X.new { |hash, key| ...} ?
Larry Fast
8/26/2007 12:06:00 AM
I created a child class of Hash and would like to internalize the
equivalent of Hash.new {|hash,key| } The following code failed:
class X < Hash
def initialize
super { |hash,key| ... }
end
end
Any suggestions? I suppose I could do it externally with a create()
wrapper but it doesn't seem very pragmatic.
def create_X
y = X.new {|hash,key| ... }
return y
end
My overall goal is to record a list of attempts to read undefined Keys.
Thanks,
Larry
--
Posted via
http://www.ruby-...
.
3 Answers
dblack
8/26/2007 12:26:00 AM
0
Bertram Scharpf
8/26/2007 12:31:00 AM
0
Hi,
Am Sonntag, 26. Aug 2007, 09:06:24 +0900 schrieb Larry Fast:
> I created a child class of Hash and would like to internalize the
> equivalent of Hash.new {|hash,key| } The following code failed:
>
> class X < Hash
> def initialize
> super { |hash,key| ... }
> end
> end
>
> Any suggestions?
Any error messages?
I pipe the following code from here in the editor into Ruby:
--------------------------------
class H < Hash
def initialize
super { |h,k| h[k] = Time.now }
end
end
h = H.new
puts h[:x]
sleep 1
puts h[:y]
puts h[:x]
--------------------------------
Sun Aug 26 02:30:35 +0200 2007
Sun Aug 26 02:30:36 +0200 2007
Sun Aug 26 02:30:35 +0200 2007
--------------------------------
Bertram
--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-...
Larry Fast
8/26/2007 8:25:00 PM
0
Thank you both. Yes, that works. So I'm puzzled by the error I was
getting. Oh well, carrying on...
I still have a related problem. I'm using YML to export and import my
Hash. YML loses all the Hash initialization settings. So I may still
have to create a new internal Hash after reloading from YML.
class X < Hash
attr_accessor :attempts
def initialize
self.attempts = []
super {|h,k| attempts << k unless h.has_key?(k); nil }
end
end
h = X.new
h[1] = 2
p h[1] # 2
p h[0] # nil
p h[2] # nil
p h.attempts # [0,2]
yml_text = YAML.dump(h) # "--- !map:X \n1: 2\n"
j = YAML.load(yml_text) # {1=>2}
j.class # X
j.attempts # nil
j[2] = 25 # 25
j # {1=>2, 2=>25}
j[3] # nil
j.attempts # nil
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
class X < Hash ... how do I do X.new { |hash, key| ...} ?
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password