[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Hash default -- what's going on here?

pete

3/15/2006 7:09:00 AM


I've hit what is either an egregious bug in ruby (1.8.4) or some subtlety
that I haven't grasped. [Most likely the latter... (:-)]

Briefly I had two arrays of symbol strings of which I wanted to find
which symbols occurred in both arrays, so I thought I'd use a hash with
the key being the symbol and the value a two element array that would
be used to flag which set(s) the symbol was found in. The following
is a simplified (and 'instrumented') version of what I was trying to
do:

listA=["line1","line2","line3"]
listB=["line5","line3","line4"]
table={}
table.default=[0,0]
print "table default originally: ", table.default, "\n"

listA.each {|a| t=table[a]; print a," -- undef value: ",t;
t[0]=1; print " new value: ",t,"\n";
table[a]=t}
print "table default now: ", table.default, "\n"

listB.each {|a| t=table[a]; print a," -- undef value: ",t;
t[1]=1; print " new value: ",t,"\n";
table[a]=t}

print "table default now: ", table.default, "\ntable contents:\n"
table.each {|k,v| print k, ": ", v[0], v[1], "\n"}


Now, in the 'each' statements, the variable 'a' should (except in one case)
not be in the hash yet, so I would expect the original provided default to
be returned. However, here's the printout I get:

table default now: 00
line1 -- undef value: 00 new value: 10
line2 -- undef value: 10 new value: 10
line3 -- undef value: 10 new value: 10
table default now: 10
line5 -- undef value: 10 new value: 11
line3 -- undef value: 11 new value: 11
line4 -- undef value: 11 new value: 11
table default now: 11
table contents:
line1: 11
line2: 11
line3: 11
line4: 11
line5: 11


Dunhh? Why is the default value getting changed? I can't see that
I'm resetting it anywhere. If I do the same sort of manipulations
outside of a block (one at a time in irb for instance) things happen
as I would expect -- the default remains as set, and is returned for
any undefined key.

Illumination appreciated.
-- Pete --

13 Answers

Daniel Baird

3/15/2006 7:18:00 AM

0

I'm guessing it's got something to do with your assignment

table[a]=t

the array that is the hash's default can be assigned to. I think that's
what you're doing. If i did some testing I might be more sure :)

;Daniel

On 15/03/06, Pete Goodeve <pete@jwgibbs.cchem.berkeley.edu> wrote:
>
>
> I've hit what is either an egregious bug in ruby (1.8.4) or some subtlety
> that I haven't grasped. [Most likely the latter... (:-)]
>
> Briefly I had two arrays of symbol strings of which I wanted to find
> which symbols occurred in both arrays, so I thought I'd use a hash with
> the key being the symbol and the value a two element array that would
> be used to flag which set(s) the symbol was found in. The following
> is a simplified (and 'instrumented') version of what I was trying to
> do:
>
> listA=["line1","line2","line3"]
> listB=["line5","line3","line4"]
> table={}
> table.default=[0,0]
> print "table default originally: ", table.default, "\n"
>
> listA.each {|a| t=table[a]; print a," -- undef value: ",t;
> t[0]=1; print " new value: ",t,"\n";
> table[a]=t}
> print "table default now: ", table.default, "\n"
>
> listB.each {|a| t=table[a]; print a," -- undef value: ",t;
> t[1]=1; print " new value: ",t,"\n";
> table[a]=t}
>
> print "table default now: ", table.default, "\ntable contents:\n"
> table.each {|k,v| print k, ": ", v[0], v[1], "\n"}
>
>
> Now, in the 'each' statements, the variable 'a' should (except in one
> case)
> not be in the hash yet, so I would expect the original provided default to
> be returned. However, here's the printout I get:
>
> table default now: 00
> line1 -- undef value: 00 new value: 10
> line2 -- undef value: 10 new value: 10
> line3 -- undef value: 10 new value: 10
> table default now: 10
> line5 -- undef value: 10 new value: 11
> line3 -- undef value: 11 new value: 11
> line4 -- undef value: 11 new value: 11
> table default now: 11
> table contents:
> line1: 11
> line2: 11
> line3: 11
> line4: 11
> line5: 11
>
>
> Dunhh? Why is the default value getting changed? I can't see that
> I'm resetting it anywhere. If I do the same sort of manipulations
> outside of a block (one at a time in irb for instance) things happen
> as I would expect -- the default remains as set, and is returned for
> any undefined key.
>
> Illumination appreciated.
> -- Pete --
>
>
>


--
Daniel Baird
http://danie... (TiddlyW;nks! :: Whiteboard Koala :: Blog :: Things
That Suck)
[[My webhost uptime is ~ 92%.. if no answer pls call again later!]]

Gerardo Santana Gómez Garrido

3/15/2006 7:39:00 AM

0

2006/3/15, Pete Goodeve <pete@jwgibbs.cchem.berkeley.edu>:
>
> I've hit what is either an egregious bug in ruby (1.8.4) or some subtlety
> that I haven't grasped. [Most likely the latter... (:-)]
>
> Briefly I had two arrays of symbol strings of which I wanted to find
> which symbols occurred in both arrays, so I thought I'd use a hash with
> the key being the symbol and the value a two element array that would
> be used to flag which set(s) the symbol was found in. The following
> is a simplified (and 'instrumented') version of what I was trying to
> do:
>
> listA=["line1","line2","line3"]
> listB=["line5","line3","line4"]
> table={}

Here's the problem:

> table.default=[0,0]


What you are looking for is:

table = Hash.new { |h, k| h[k] = [0, 0] }

otherwise you are always pointing to _the same_ object


pete

3/15/2006 9:08:00 AM

0

In article <ca19f32e0603142317y1b97a5c9k@mail.gmail.com>,
Daniel Baird <danielbaird@gmail.com> wrote:
>------=_Part_6549_12041498.1142407055374
>Content-Type: text/plain; charset=ISO-8859-1
>Content-Transfer-Encoding: quoted-printable
>Content-Disposition: inline
>
>I'm guessing it's got something to do with your assignment
>
> table[a]=3Dt
>
>the array that is the hash's default can be assigned to. I think that's
>what you're doing. If i did some testing I might be more sure :)
>

Heh -- you can tell I'm new to ruby... (:-))

An hour after I posted I suddenly realized what is going on.
When you assign an array, the array is *not* copied! the assigned-to
variable just gets a pointer to the other array.

So when I did "t=table[a]" I was setting t to a pointer to the default!
When I changed t[n], of course the default was actually what got changed...

Sigh. Hardly a novel gotcha, but I fell right into it.

Not sure of the best way to do what I want -- maybe just use 'has_key?'
and then do the right thing.
-- Pete --

Robert Klemme

3/15/2006 2:24:00 PM

0


"Pete Goodeve" <pete@jwgibbs.cchem.berkeley.edu> wrote in message
news:dv8lhf$18m$1@jwgibbs.CChem.Berkeley.EDU...
> Not sure of the best way to do what I want -- maybe just use 'has_key?'
> and then do the right thing.

The question is what exactly are you trying to do?

robert

bámbÒe

9/2/2010 11:52:00 PM

0

On 9/3/2010 5:29 AM, JockoThinker wrote:
>
>> kenafè seh selama iQ doktÖol agak mendayung tanpa perahu.
>> waspada....waspada.......èslam ancoer karena pembusokan dari dalem
>
> kalau mampu berjalan diatas air .. tidak harus naik perahu ....
>

doQ , énté pracaya réinkarnasi nggak ?

JockoThinker

9/3/2010 4:31:00 AM

0

On 3 Sep, 06:51, bámbÖó <batoeka...@covecave.org> wrote:
> On 9/3/2010 5:29 AM, JockoThinker wrote:
>
>
>
> >> kenafè seh selama iQ doktÖol agak mendayung tanpa perahu.
> >> waspada....waspada.......èslam ancoer karena pembusokan dari dalem
>
> > kalau mampu berjalan diatas air .. tidak harus naik perahu ....
>
> doQ , énté pracaya réinkarnasi nggak ?

Ane ngga terlalo Soka Kata "Pracoyo" .. soalnya "pracoyo" deket dengen
pemaksaan diri kendiri ... untuk menerima hil-hal yang soelet
dipahami. Pracoyo Cuocok bagi para pendaki yang masih di kaki Bukit.

Bahasa agama sebenarnya Deket banget dengan Bahasa Alam, bila kita
mulai bisa mengalir meleburkan "rasa" dan menangkap menyatunya bahasa
Agama dengan "getaran-getaran aliran" alam maka "sisik melik rahasia"
sedikit-sedikit terungkap meskipun masih tetap harus menyisakan
Kecurigaan bahwa itu adalah persepsi Pribadi saja. Dan ini bukanlah
mistis sama sekali ... ane ngga terlalu soka yang mistis - mistis itu
seperti menghinakan kecerdasan manusia.

Reinkarnasi dalam pengertian masuk menjadi mahluk lain di dunia ini
atau masuk ke dalam tubuh manusia baru dalam bahasa lain proses daur
ulang, belum bisa menangkap dari "Bahasa Alam" yang dapat dijangkau.

Tetapi Jika ada sebuah tujuan dari semua peristiwa ini dan terminal
itu merupakan sebuah muara dari puncak jejak-jejak kita .. dan kita
semua akan melewati peristiwa itu, maka kilatan-kilatan hal ini bisa
tertangkap.

Semakin sering kita menangkap kilatan-kilatan isyarat ini maka semakin
mudah kita merangkai dalam sebuah bahasa pemahaman, meskipunn tetap
sulit di bahasakan.

Kilatan-kilatan isyarat yang mampu kita tangkap sungguh begitu
menggetarkan ... terlalu banyak rahasia yang sulit di tembus tetapi
begitu mempesona dan membuat penasaran.

hehehehe gitu ajah daCh .... ntar kebanyakan ....





bámbÒe

9/3/2010 6:08:00 AM

0

On 9/3/2010 11:31 AM, JockoThinker wrote:
> On 3 Sep, 06:51, bámbÖó<batoeka...@covecave.org> wrote:
>> On 9/3/2010 5:29 AM, JockoThinker wrote:
>>
>>
>>
>>>> kenafè seh selama iQ doktÖol agak mendayung tanpa perahu.
>>>> waspada....waspada.......èslam ancoer karena pembusokan dari dalem
>>
>>> kalau mampu berjalan diatas air .. tidak harus naik perahu ....
>>
>> doQ , énté pracaya réinkarnasi nggak ?
>
> Ane ngga terlalo Soka Kata "Pracoyo" .. soalnya "pracoyo" deket dengen
> pemaksaan diri kendiri ... untuk menerima hil-hal yang soelet
> dipahami. Pracoyo Cuocok bagi para pendaki yang masih di kaki Bukit.
>
> Bahasa agama sebenarnya Deket banget dengan Bahasa Alam, bila kita
> mulai bisa mengalir meleburkan "rasa" dan menangkap menyatunya bahasa
> Agama dengan "getaran-getaran aliran" alam maka "sisik melik rahasia"
> sedikit-sedikit terungkap meskipun masih tetap harus menyisakan
> Kecurigaan bahwa itu adalah persepsi Pribadi saja. Dan ini bukanlah
> mistis sama sekali ... ane ngga terlalu soka yang mistis - mistis itu
> seperti menghinakan kecerdasan manusia.
>
> Reinkarnasi dalam pengertian masuk menjadi mahluk lain di dunia ini
> atau masuk ke dalam tubuh manusia baru dalam bahasa lain proses daur
> ulang, belum bisa menangkap dari "Bahasa Alam" yang dapat dijangkau.
>
> Tetapi Jika ada sebuah tujuan dari semua peristiwa ini dan terminal
> itu merupakan sebuah muara dari puncak jejak-jejak kita .. dan kita
> semua akan melewati peristiwa itu, maka kilatan-kilatan hal ini bisa
> tertangkap.
>

makin jelaz kalaoe koran énté mémang béda pèrsi dèngen poenya-é ngoztadt Öon
koran-né amsterdamned ada ayat-é ,

kayfa takfuruuna biallaahi wakuntum amwaatan fa-ahyaakum tsumma
yumiitukum tsumma yuhyiikum tsumma ilayhi turja'uuna

> Semakin sering kita menangkap kilatan-kilatan isyarat ini maka semakin
> mudah kita merangkai dalam sebuah bahasa pemahaman, meskipunn tetap
> sulit di bahasakan.
>
> Kilatan-kilatan isyarat yang mampu kita tangkap sungguh begitu
> menggetarkan ... terlalu banyak rahasia yang sulit di tembus tetapi
> begitu mempesona dan membuat penasaran.
>
> hehehehe gitu ajah daCh .... ntar kebanyakan ....
>
>
>
>
>

JockoThinker

9/3/2010 7:01:00 AM

0

On 3 Sep, 13:07, bámbÖó <batoeka...@covecave.org> wrote:
> On 9/3/2010 11:31 AM, JockoThinker wrote:
>
>
>
>
>
> > On 3 Sep, 06:51, bámbÖó<batoeka...@covecave.org>  wrote:
> >> On 9/3/2010 5:29 AM, JockoThinker wrote:
>
> >>>> kenafè seh selama iQ doktÖol agak mendayung tanpa perahu.
> >>>> waspada....waspada.......èslam ancoer karena pembusokan dari dalem
>
> >>> kalau mampu berjalan diatas air .. tidak harus naik perahu ....
>
> >> doQ , énté pracaya réinkarnasi nggak ?
>
> > Ane ngga terlalo Soka Kata "Pracoyo" .. soalnya "pracoyo" deket dengen
> > pemaksaan diri kendiri ... untuk menerima hil-hal yang soelet
> > dipahami. Pracoyo Cuocok bagi para pendaki yang masih di kaki Bukit.
>
> > Bahasa agama sebenarnya Deket banget dengan Bahasa Alam, bila kita
> > mulai bisa mengalir meleburkan "rasa" dan menangkap menyatunya bahasa
> > Agama dengan "getaran-getaran aliran" alam maka "sisik melik rahasia"
> > sedikit-sedikit terungkap meskipun masih tetap harus menyisakan
> > Kecurigaan bahwa itu adalah persepsi Pribadi saja.  Dan ini bukanlah
> > mistis sama sekali ...  ane ngga terlalu soka yang mistis - mistis itu
> > seperti menghinakan kecerdasan manusia.
>
> > Reinkarnasi dalam pengertian masuk menjadi mahluk lain di dunia ini
> > atau masuk ke dalam tubuh manusia baru dalam bahasa lain proses daur
> > ulang, belum bisa menangkap dari "Bahasa Alam" yang dapat dijangkau.
>
> > Tetapi Jika ada sebuah tujuan dari semua peristiwa ini dan terminal
> > itu merupakan sebuah muara dari puncak jejak-jejak kita .. dan kita
> > semua akan melewati peristiwa itu, maka kilatan-kilatan hal ini bisa
> > tertangkap.
>
> makin jelaz kalaoe koran énté mémang béda pèrsi dèngen poenya-é ngoztadt Öon
> koran-né amsterdamned ada ayat-é ,
>
> kayfa takfuruuna biallaahi wakuntum amwaatan fa-ahyaakum tsumma
> yumiitukum tsumma yuhyiikum tsumma ilayhi turja'uuna

Ibarat kita Bepergian ayat itu merupakan petunjuk jalan dan Penerang
dalam perjalanan, sedangkan dalam perjalanannya kita akan mendapati
pemandangan dan panorama yang semakin jelas dan semakin jelas bahwa
ayat itu BENAR adanya.

Ketika secara Logika dan akal budi kita telah "berserah Diri" maka
selanjutnya menuntut untuk tidak hanya sekedar pengakuan, yang akan
menjadi proses menyatunya "pemahaman" dengan diri-sendiri.

bámbÒe

9/3/2010 7:52:00 AM

0

On 9/3/2010 2:00 PM, JockoThinker wrote:
> On 3 Sep, 13:07, bámbÖó<batoeka...@covecave.org> wrote:
>> On 9/3/2010 11:31 AM, JockoThinker wrote:
>>
>>
>>
>>
>>
>>> On 3 Sep, 06:51, bámbÖó<batoeka...@covecave.org> wrote:
>>>> On 9/3/2010 5:29 AM, JockoThinker wrote:
>>
>>>>>> kenafè seh selama iQ doktÖol agak mendayung tanpa perahu.
>>>>>> waspada....waspada.......èslam ancoer karena pembusokan dari dalem
>>
>>>>> kalau mampu berjalan diatas air .. tidak harus naik perahu ....
>>
>>>> doQ , énté pracaya réinkarnasi nggak ?
>>
>>> Ane ngga terlalo Soka Kata "Pracoyo" .. soalnya "pracoyo" deket dengen
>>> pemaksaan diri kendiri ... untuk menerima hil-hal yang soelet
>>> dipahami. Pracoyo Cuocok bagi para pendaki yang masih di kaki Bukit.
>>
>>> Bahasa agama sebenarnya Deket banget dengan Bahasa Alam, bila kita
>>> mulai bisa mengalir meleburkan "rasa" dan menangkap menyatunya bahasa
>>> Agama dengan "getaran-getaran aliran" alam maka "sisik melik rahasia"
>>> sedikit-sedikit terungkap meskipun masih tetap harus menyisakan
>>> Kecurigaan bahwa itu adalah persepsi Pribadi saja. Dan ini bukanlah
>>> mistis sama sekali ... ane ngga terlalu soka yang mistis - mistis itu
>>> seperti menghinakan kecerdasan manusia.
>>
>>> Reinkarnasi dalam pengertian masuk menjadi mahluk lain di dunia ini
>>> atau masuk ke dalam tubuh manusia baru dalam bahasa lain proses daur
>>> ulang, belum bisa menangkap dari "Bahasa Alam" yang dapat dijangkau.
>>
>>> Tetapi Jika ada sebuah tujuan dari semua peristiwa ini dan terminal
>>> itu merupakan sebuah muara dari puncak jejak-jejak kita .. dan kita
>>> semua akan melewati peristiwa itu, maka kilatan-kilatan hal ini bisa
>>> tertangkap.
>>
>> makin jelaz kalaoe koran énté mémang béda pèrsi dèngen poenya-é ngoztadt Öon
>> koran-né amsterdamned ada ayat-é ,
>>
>> kayfa takfuruuna biallaahi wakuntum amwaatan fa-ahyaakum tsumma
>> yumiitukum tsumma yuhyiikum tsumma ilayhi turja'uuna
>
> Ibarat kita Bepergian ayat itu merupakan petunjuk jalan dan Penerang
> dalam perjalanan, sedangkan dalam perjalanannya kita akan mendapati
> pemandangan dan panorama yang semakin jelas dan semakin jelas bahwa
> ayat itu BENAR adanya.
>
> Ketika secara Logika dan akal budi kita telah "berserah Diri" maka
> selanjutnya menuntut untuk tidak hanya sekedar pengakuan, yang akan
> menjadi proses menyatunya "pemahaman" dengan diri-sendiri.

wakakaka.........moealoe mengakoi kalaoe merampok ajaran boemi mengenai
réinkarnasi.
ayat-é baroe diklowarken kalaoe nanti terbokti ada yang réinkarnasi.
nih , di koran soedah bisa dibaca akan nanti sakmowa yang akan terjadi.

JockoThinker

9/3/2010 8:45:00 AM

0

On 3 Sep, 14:52, bámbÖó <batoeka...@covecave.org> wrote:
> On 9/3/2010 2:00 PM, JockoThinker wrote:
>
>
>
>
>
> > On 3 Sep, 13:07, bámbÖó<batoeka...@covecave.org>  wrote:
> >> On 9/3/2010 11:31 AM, JockoThinker wrote:
>
> >>> On 3 Sep, 06:51, bámbÖó<batoeka...@covecave.org>    wrote:
> >>>> On 9/3/2010 5:29 AM, JockoThinker wrote:
>
> >>>>>> kenafè seh selama iQ doktÖol agak mendayung tanpa perahu.
> >>>>>> waspada....waspada.......èslam ancoer karena pembusokan dari dalem
>
> >>>>> kalau mampu berjalan diatas air .. tidak harus naik perahu ....
>
> >>>> doQ , énté pracaya réinkarnasi nggak ?
>
> >>> Ane ngga terlalo Soka Kata "Pracoyo" .. soalnya "pracoyo" deket dengen
> >>> pemaksaan diri kendiri ... untuk menerima hil-hal yang soelet
> >>> dipahami. Pracoyo Cuocok bagi para pendaki yang masih di kaki Bukit.
>
> >>> Bahasa agama sebenarnya Deket banget dengan Bahasa Alam, bila kita
> >>> mulai bisa mengalir meleburkan "rasa" dan menangkap menyatunya bahasa
> >>> Agama dengan "getaran-getaran aliran" alam maka "sisik melik rahasia"
> >>> sedikit-sedikit terungkap meskipun masih tetap harus menyisakan
> >>> Kecurigaan bahwa itu adalah persepsi Pribadi saja.  Dan ini bukanlah
> >>> mistis sama sekali ...  ane ngga terlalu soka yang mistis - mistis itu
> >>> seperti menghinakan kecerdasan manusia.
>
> >>> Reinkarnasi dalam pengertian masuk menjadi mahluk lain di dunia ini
> >>> atau masuk ke dalam tubuh manusia baru dalam bahasa lain proses daur
> >>> ulang, belum bisa menangkap dari "Bahasa Alam" yang dapat dijangkau.
>
> >>> Tetapi Jika ada sebuah tujuan dari semua peristiwa ini dan terminal
> >>> itu merupakan sebuah muara dari puncak jejak-jejak kita .. dan kita
> >>> semua akan melewati peristiwa itu, maka kilatan-kilatan hal ini bisa
> >>> tertangkap.
>
> >> makin jelaz kalaoe koran énté mémang béda pèrsi dèngen poenya-é ngoztadt Öon
> >> koran-né amsterdamned ada ayat-é ,
>
> >> kayfa takfuruuna biallaahi wakuntum amwaatan fa-ahyaakum tsumma
> >> yumiitukum tsumma yuhyiikum tsumma ilayhi turja'uuna
>
> > Ibarat kita Bepergian ayat itu merupakan petunjuk jalan dan Penerang
> > dalam perjalanan, sedangkan dalam perjalanannya kita akan mendapati
> > pemandangan dan panorama yang semakin jelas dan semakin jelas bahwa
> > ayat itu BENAR adanya.
>
> > Ketika secara Logika dan akal budi kita telah "berserah Diri" maka
> > selanjutnya menuntut untuk tidak hanya sekedar pengakuan, yang akan
> > menjadi proses menyatunya "pemahaman" dengan diri-sendiri.
>
> wakakaka.........moealoe mengakoi kalaoe merampok ajaran boemi mengenai
> réinkarnasi.
> ayat-é baroe diklowarken kalaoe nanti terbokti ada yang réinkarnasi.
> nih , di koran soedah bisa dibaca akan nanti sakmowa yang akan terjadi

Kalaw :

merubah dari salah ke Benar
dari Bengkok jadi LURUS
Dari Gereja jadi Masjid

IQ mang seharusnya ...

Yang menjadi Heirman IQ kalaw :

Dari Benar menjadi Absurd
dari Lurus menjadi Bangkok Thailand
dari Nabi ISA menjadi TRIMURTI ....