From: "Abinoam Jr." Date: 2010-12-22T16:58:49+09:00 Subject: Re: Regexp, String, Symbol literals' object_ids --0016369fa2bb7700620497fb1f77 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi Pavel, I was trying to learn about "const_missing" and I digged a little more down your problem. Sending the code attached. It compares unpack using as arguments: 1) String (like the code you sent bellow) 2) predefined constants referencing strings (you said that it would pollute your code) 3) undefined constants that are then defined by const_missing (doesn't handle special characters like ("*"). The use of constants seems to be a little faster for the reasons you said before (no instantiating a new string each iteration). What kind of "problem" are going to need do so many packs/unpacks that this part (constant or string) will make much difference? In my PC it had to repeat that 2 unpacks almost 1 million of times to last 1 second. For improving the code we should handle the "*" character. We could use a char that is not reserved by pack. Like "o", for example, so "o" would be substituted by "*" in the generated string. I'm new at ruby (but studying hard). Sorry for any mistake. And, feedback (by anyone) about the code would be appreciated. Abinoam Jr. On Tue, Dec 21, 2010 at 12:56 PM, Pavel R. wrote= : > Example: > > class A > =A0def m > =A0 =A0a,b,c,d =3D data.unpack('NNvv') > =A0 =A0e,f,g,h =3D a.unpack('vNNv') > =A0 =A0# and so on ... > =A0 =A0# do something with data > =A0end > end > > To prevent 'NNvv' again and again I can assign a constant > > class A > =A0Format_NNvv =3D 'NNvv' > end > > and use it. > > But there's many different 'NNvv', 'vNNv', 'a*c', ... in my code so I > need to assign all them to constants. This approach implies a large > section of assigning constants. > > -- > Posted via http://www.ruby-forum.com/. --0016369fa2bb7700620497fb1f77 Content-Type: application/x-ruby; name="c2s4pack.rb" Content-Disposition: attachment; filename="c2s4pack.rb" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ghzxieyx0 IyEvdXNyL2Jpbi9lbnYgcnVieQoKIyBjMnM0cGFjay5yYiAtIENvbnN0IHRvIFN0cmluZyBmb3Ig dXNlIGluIHBhY2sKIyAKIyAyMDEwIC0gRGVjZW1iZXIgLSBBYmlub2FtIEpyLgojIAojIExlYXJu aW5nIHRvIHVzZSAiY29uc3RfbWlzc2luZyIKIwojIEl0IHN0aWxsIGRvZXNuJ3QgaGFuZGxlIHNw ZWNpYWwgY2hhcmFjdGVycyBsaWtlICIqIi4KIyBQbGFuLi4uIHJlZ2V4cHkgc29tZSBvdGhlciBj aGFyIHRvIGNvbnZlcnQgdG8gIioiLgojCgpyZXF1aXJlICdiZW5jaG1hcmsnCgpjbGFzcyBBCgog IyBTdHJhaWdodCBjb25zdCB0byBzdHIgbWFwcGluZwogRm10X2ZpcnN0ID0gIk5OdnYiCiBGbXRf c2Vjb25kID0gInZOTnYiCgogIyBUaGUgIm9yaWdpbmFsIiBvbmUKIGRlZiBtX29yaWdpbmFsIChk YXRhKQogICBhLGIsYyxkID0gZGF0YS51bnBhY2soJ05OdnYnKQogICBlLGYsZyxoID0gZGF0YS51 bnBhY2soJ3ZOTnYnKQogICAjIGFuZCBzbyBvbiAuLi4KICAgIyBkbyBzb21ldGhpbmcgd2l0aCBk YXRhCiAgIHJldHVybiBbYSxiLGMsZCxlLGYsZyxoXQogZW5kCgogIyBTdHJhaWdodCBjb25zdCB0 byBzdHIgbWFwcGluZwogZGVmIG1fc2ltcGxlX2NvbnN0IChkYXRhKQogICBhLGIsYyxkID0gZGF0 YS51bnBhY2soRm10X2ZpcnN0KQogICBlLGYsZyxoID0gZGF0YS51bnBhY2soRm10X3NlY29uZCkK ICAgcmV0dXJuIFthLGIsYyxkLGUsZixnLGhdCiBlbmQKCiAjIEdpdmUgYSBjb25zdGFudCBhcyBh cmd1bWVudAogIyBjb25zdF9taXNzaW5nIHdpbGwgZG8gdGhlIGpvYgogZGVmIG1fY29uc3RfbWlz cyAoZGF0YSkKICAgYSxiLGMsZCA9IGRhdGEudW5wYWNrKEZtdF9OTnZ2KQogICBlLGYsZyxoID0g ZGF0YS51bnBhY2soRm10X3ZOTnYpCiAgIHJldHVybiBbYSxiLGMsZCxlLGYsZyxoXQogZW5kCgog ZGVmIHNlbGYuY29uc3RfbWlzc2luZyhtY29uc3QpCiAgIG1jb25zdF9zdHIgPSBtY29uc3QudG9f cwogICBwYXQgPSAvRm10XyguKikvCiAgIHJlZnMgPSBtY29uc3Rfc3RyLm1hdGNoKHBhdCkKICAg c3VwZXIuY29uc3RfbWlzc2luZyhtY29uc3QpIGlmIHJlZnMubmlsPwogICBzZW50ZW5jZSA9ICIj e21jb25zdF9zdHJ9ID0gJyN7cmVmc1sxXX0nIiAjIHJlZnNbMV0gaXMgdGhlIHBhcnQgYWZ0ZXIg Rm10XwogICBldmFsKHNlbnRlbmNlKSAKIGVuZCAKZW5kCgpwYWNrZWQgPSBbMHhmMCwgMHhlMSwg MHhkMiwgMHhjM10ucGFjaygndk5OdicpCgphID0gQS5uZXcKCmlmIEFSR1ZbMF0ubmlsPwogIG4g PSAxMF8wMDAgIyB0aW1lcwplbHNlCiAgbiA9IEFSR1ZbMF0udG9faSAjIHRpbWVzCmVuZAoKQmVu Y2htYXJrLmJtIGRvIHxyZXB8CiAgcmVwLnJlcG9ydCgibV9vcmlnaW5hbCAgICAgICAgICAiKSB7 IG4udGltZXMgeyBhLm1fb3JpZ2luYWwgcGFja2VkIH0gfQogIHJlcC5yZXBvcnQoIm1fc2ltcGxl X2NvbnN0ICAgICAgIikgeyBuLnRpbWVzIHsgYS5tX3NpbXBsZV9jb25zdCBwYWNrZWQgfSB9CiAg cmVwLnJlcG9ydCgibV9jb25zdF9taXNzICAgICAgICAiKSB7IG4udGltZXMgeyBhLm1fY29uc3Rf bWlzcyBwYWNrZWQgfSB9CmVuZAoK --0016369fa2bb7700620497fb1f77--