From: Nobuyoshi Nakada Date: 2010-12-10T20:04:05+09:00 Subject: [ruby-dev:42733] [Ruby 1.9-Feature#4146][Open] Improvement of Symbol and Proc --mimepart_4d0208b571f24_54b5b57a3722f9 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Feature #4146: Improvement of Symbol and Proc http://redmine.ruby-lang.org/issues/show/4146 =E8=B5=B7=E7=A5=A8=E8=80=85: Nobuyoshi Nakada =E3=82=B9=E3=83=86=E3=83=BC=E3=82=BF=E3=82=B9: Open, =E5=84=AA=E5=85=88=E5= =BA=A6: Normal =E3=82=AB=E3=83=86=E3=82=B4=E3=83=AA: core =E7=8F=BE=E5=9C=A8Symbol#to_proc=E3=81=A7 %w[12 45 32].map(&:to_i) =E3=81= =AE=E3=82=88=E3=81=86=E3=81=AA=E3=81=93=E3=81=A8=E3=81=AF=E3=81=A7=E3=81=8D= =E3=81=BE=E3=81=99=E3=81=8C=E3=80=81 =E5=BC=95=E6=95=B0=E3=82=92=E4=BB=98=E3=81=91=E3=81=A6=E3=83=A1=E3=82=BD=E3= =83=83=E3=83=89=E3=82=92=E5=91=BC=E3=81=B6=E3=81=93=E3=81=A8=E3=81=AF=E3=81= =A7=E3=81=8D=E3=81=BE=E3=81=9B=E3=82=93=E3=80=82Symbol=E3=83=AA=E3=83=86=E3= =83=A9=E3=83=AB=E3=81=AB=E5=BC=95=E6=95=B0=E3=82=92=E4=BB=98=E3=81=91 =E3=81=9F=E3=82=89=E3=81=9D=E3=81=AE=E5=BC=95=E6=95=B0=E3=81=A8=E5=85=B1=E3= =81=AB=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=82=92=E5=91=BC=E3=81=B6Proc= =E3=82=92=E4=BD=9C=E3=82=8B=E6=A7=8B=E6=96=87=E3=81=A8=E3=81=84=E3=81=86=E3= =81=AE=E3=81=AF=E3=81=A9=E3=81=86=E3=81=A7=E3=81=97=E3=82=87=E3=81=86=E3=81= =8B=E3=80=82 %w[12 45 32].map(&:to_i(9)).map(&:*(2)) #=3D> [22, 82, 58] %w[abc def ghi].map(&:[1]) #=3D> ["b", "e", "h"] ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4d0208b571f24_54b5b57a3722f9 Content-Type: application/octet-stream; name=symbol_lambda.diff Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=symbol_lambda.diff ZGlmZiAtLWdpdCBpL3BhcnNlLnkgdy9wYXJzZS55CmluZGV4IGYyYTU1NmEu LmE3YTM1OGEgMTAwNjQ0Ci0tLSBpL3BhcnNlLnkKKysrIHcvcGFyc2UueQpA QCAtMzU2LDYgKzM1Niw4IEBAIHN0YXRpYyBOT0RFICphcmdfYXBwZW5kX2dl bihzdHJ1Y3QgcGFyc2VyX3BhcmFtcyosTk9ERSosTk9ERSopOwogI2RlZmlu ZSBhcmdfYXBwZW5kKGgsdCkgYXJnX2FwcGVuZF9nZW4ocGFyc2VyLGgsdCkK IHN0YXRpYyBOT0RFICphcmdfY29uY2F0X2dlbihzdHJ1Y3QgcGFyc2VyX3Bh cmFtcyosTk9ERSosTk9ERSopOwogI2RlZmluZSBhcmdfY29uY2F0KGgsdCkg YXJnX2NvbmNhdF9nZW4ocGFyc2VyLGgsdCkKK3N0YXRpYyBOT0RFICphcmdf cHJlcGVuZF9nZW4oc3RydWN0IHBhcnNlcl9wYXJhbXMqLE5PREUqLE5PREUq KTsKKyNkZWZpbmUgYXJnX3ByZXBlbmQoaCx0KSBhcmdfcHJlcGVuZF9nZW4o cGFyc2VyLGgsdCkKIHN0YXRpYyBOT0RFICpsaXRlcmFsX2NvbmNhdF9nZW4o c3RydWN0IHBhcnNlcl9wYXJhbXMqLE5PREUqLE5PREUqKTsKICNkZWZpbmUg bGl0ZXJhbF9jb25jYXQoaCx0KSBsaXRlcmFsX2NvbmNhdF9nZW4ocGFyc2Vy LGgsdCkKIHN0YXRpYyBpbnQgbGl0ZXJhbF9jb25jYXQwKHN0cnVjdCBwYXJz ZXJfcGFyYW1zICosIFZBTFVFLCBWQUxVRSk7CkBAIC00MDEsNiArNDAzLDkg QEAgc3RhdGljIE5PREUgKm1hdGNoX29wX2dlbihzdHJ1Y3QgcGFyc2VyX3Bh cmFtcyosTk9ERSosTk9ERSopOwogc3RhdGljIElEICAqbG9jYWxfdGJsX2dl bihzdHJ1Y3QgcGFyc2VyX3BhcmFtcyopOwogI2RlZmluZSBsb2NhbF90Ymwo KSBsb2NhbF90YmxfZ2VuKHBhcnNlcikKIAorc3RhdGljIE5PREUgKnN5bWJv bF9sYW1iZGFfZ2VuKHN0cnVjdCBwYXJzZXJfcGFyYW1zICosIElELCBOT0RF ICopOworI2RlZmluZSBzeW1ib2xfbGFtYmRhKG1pZCwgYXJncykgc3ltYm9s X2xhbWJkYV9nZW4ocGFyc2VyLCBtaWQsIGFyZ3MpCisKIHN0YXRpYyB2b2lk IGZpeHVwX25vZGVzKE5PREUgKiopOwogCiBleHRlcm4gaW50IHJiX2R2YXJf ZGVmaW5lZChJRCk7CkBAIC02NzYsNyArNjgxLDcgQEAgc3RhdGljIHZvaWQg dG9rZW5faW5mb19wb3Aoc3RydWN0IHBhcnNlcl9wYXJhbXMqLCBjb25zdCBj aGFyICp0b2tlbik7CiAJa2V5d29yZF9fRklMRV9fCiAJa2V5d29yZF9fRU5D T0RJTkdfXwogCi0ldG9rZW4gPGlkPiAgIHRJREVOVElGSUVSIHRGSUQgdEdW QVIgdElWQVIgdENPTlNUQU5UIHRDVkFSIHRMQUJFTAorJXRva2VuIDxpZD4g ICB0SURFTlRJRklFUiB0RklEIHRHVkFSIHRJVkFSIHRDT05TVEFOVCB0Q1ZB UiB0TEFCRUwgdEFSRUZCRUcKICV0b2tlbiA8bm9kZT4gdElOVEVHRVIgdEZM T0FUIHRTVFJJTkdfQ09OVEVOVCB0Q0hBUgogJXRva2VuIDxub2RlPiB0TlRI X1JFRiB0QkFDS19SRUYKICV0b2tlbiA8bnVtPiAgdFJFR0VYUF9FTkQKQEAg LTY5OCw3ICs3MDMsNyBAQCBzdGF0aWMgdm9pZCB0b2tlbl9pbmZvX3BvcChz dHJ1Y3QgcGFyc2VyX3BhcmFtcyosIGNvbnN0IGNoYXIgKnRva2VuKTsKICV0 eXBlIDxub2RlPiBhc3NvY19saXN0IGFzc29jcyBhc3NvYyB1bmRlZl9saXN0 IGJhY2tyZWYgc3RyaW5nX2R2YXIgZm9yX3ZhcgogJXR5cGUgPG5vZGU+IGJs b2NrX3BhcmFtIG9wdF9ibG9ja19wYXJhbSBibG9ja19wYXJhbV9kZWYgZl9v cHQKICV0eXBlIDxub2RlPiBidl9kZWNscyBvcHRfYnZfZGVjbCBidmFyCi0l dHlwZSA8bm9kZT4gbGFtYmRhIGZfbGFyZ2xpc3QgbGFtYmRhX2JvZHkKKyV0 eXBlIDxub2RlPiBsYW1iZGEgZl9sYXJnbGlzdCBsYW1iZGFfYm9keSBzeW1f bGFtYmRhCiAldHlwZSA8bm9kZT4gYnJhY2VfYmxvY2sgY21kX2JyYWNlX2Js b2NrIGRvX2Jsb2NrIGxocyBub25lIGZpdGVtCiAldHlwZSA8bm9kZT4gbWxo cyBtbGhzX2hlYWQgbWxoc19iYXNpYyBtbGhzX2l0ZW0gbWxoc19ub2RlIG1s aHNfcG9zdCBtbGhzX2lubmVyCiAldHlwZSA8aWQ+ICAgZnN5bSB2YXJpYWJs ZSBzeW0gc3ltYm9sIG9wZXJhdGlvbiBvcGVyYXRpb24yIG9wZXJhdGlvbjMK QEAgLTE4NTksNiArMTg2NCw3IEBAIG9wCQk6ICd8JwkJeyBpZm5kZWZfcmlw cGVyKCQkID0gJ3wnKTsgfQogCQl8IHRVTUlOVVMJeyBpZm5kZWZfcmlwcGVy KCQkID0gdFVNSU5VUyk7IH0KIAkJfCB0QVJFRgkJeyBpZm5kZWZfcmlwcGVy KCQkID0gdEFSRUYpOyB9CiAJCXwgdEFTRVQJCXsgaWZuZGVmX3JpcHBlcigk JCA9IHRBU0VUKTsgfQorCQl8IHRBUkVGQkVHCXsgaWZuZGVmX3JpcHBlcigk JCA9IHRBUkVGQkVHKTsgfQogCQl8ICdgJwkJeyBpZm5kZWZfcmlwcGVyKCQk ID0gJ2AnKTsgfQogCQk7CiAKQEAgLTI1NzYsNiArMjU4Miw3IEBAIG1yaHMJ CTogYXJncyAnLCcgYXJnX3ZhbHVlCiAJCTsKIAogcHJpbWFyeQkJOiBsaXRl cmFsCisJCXwgc3ltX2xhbWJkYQogCQl8IHN0cmluZ3MKIAkJfCB4c3RyaW5n CiAJCXwgcmVnZXhwCkBAIC0zNTI4LDYgKzM1MzUsMzkgQEAgbGFtYmRhX2Jv ZHkJOiB0TEFNQkVHIGNvbXBzdG10ICd9JwogCQkgICAgfQogCQk7CiAKK3N5 bV9sYW1iZGEJOiBsaXRlcmFsIHBhcmVuX2FyZ3MKKwkJICAgIHsKKwkJICAg IC8qJSUlKi8KKwkJCWlmIChuZF90eXBlKCQxKSA9PSBOT0RFX0xJVCA/IFNZ TUJPTF9QKCQxLT5uZF9saXQpIDoKKwkJCSAgICBuZF90eXBlKCQxKSA9PSBO T0RFX0RTWU0pIHsKKwkJCSAgICBJRCBtaWQgPSBpZF9fc2VuZF9fOworCQkJ ICAgIGlmIChuZF90eXBlKCQxKSA9PSBOT0RFX0xJVCkgeworCQkJCW1pZCA9 IFNZTTJJRCgkMS0+bmRfbGl0KTsKKwkJCSAgICB9CisJCQkgICAgZWxzZSB7 CisJCQkJJDIgPSBhcmdfcHJlcGVuZChORVdfTElTVCgkMSksICQyKTsKKwkJ CSAgICB9CisJCQkgICAgJCQgPSBzeW1ib2xfbGFtYmRhKG1pZCwgJDIpOwor CQkJICAgIGZpeHBvcygkJCwgJDEpOworCQkJfQorCQkJZWxzZSB7CisJCQkg ICAgY29tcGlsZV9lcnJvcihQQVJTRVJfQVJHICJub24tc3ltYm9sIGxhbWJk YSIpOworCQkJfQorCQkgICAgLyolCisJCQkkJCA9IGRpc3BhdGNoMihsYW1i ZGEsICQxLCAkMik7CisJCSAgICAlKi8KKwkJICAgIH0KKwkJfCAvKjonWycq LyB0QVJFRkJFRyB7ICQ8bnVtPiQgPSBydWJ5X3NvdXJjZWxpbmU7IH0gYXJl Zl9hcmdzICddJworCQkgICAgeworCQkgICAgLyolJSUqLworCQkJJCQgPSBz eW1ib2xfbGFtYmRhKHRBUkVGLCAkMyk7CisJCQluZF9zZXRfbGluZSgkJCwg JDxudW0+Mik7CisJCSAgICAvKiUKKwkJCSQkID0gZGlzcGF0Y2gyKGxhbWJk YSwgcmlwcGVyX2lkMnN5bSh0QVJFRiksICQzKTsKKwkJICAgICUqLworCQkg ICAgfQorCQk7CisKIGRvX2Jsb2NrCToga2V5d29yZF9kb19ibG9jawogCQkg ICAgewogCQkJJDx2YXJzPjEgPSBkeW5hX3B1c2goKTsKQEAgLTczMDQsNiAr NzM0NCwxMSBAQCBwYXJzZXJfeXlsZXgoc3RydWN0IHBhcnNlcl9wYXJhbXMg KnBhcnNlcikKIAkgIGNhc2UgJyInOgogCSAgICBsZXhfc3RydGVybSA9IE5F V19TVFJURVJNKHN0cl9kc3ltLCBjLCAwKTsKIAkgICAgYnJlYWs7CisJICBj YXNlICdbJzoKKwkgICAgaWYgKCFwZWVrKCddJykpIHsKKwkJbGV4X3N0YXRl ID0gRVhQUl9CRUc7CisJCXJldHVybiB0QVJFRkJFRzsKKwkgICAgfQogCSAg ZGVmYXVsdDoKIAkgICAgcHVzaGJhY2soYyk7CiAJICAgIGJyZWFrOwpAQCAt ODM4Nyw2ICs4NDMyLDQ5IEBAIGFyZ19hcHBlbmRfZ2VuKHN0cnVjdCBwYXJz ZXJfcGFyYW1zICpwYXJzZXIsIE5PREUgKm5vZGUxLCBOT0RFICpub2RlMikK IH0KIAogc3RhdGljIE5PREUgKgorYXJnX3ByZXBlbmRfZ2VuKHN0cnVjdCBw YXJzZXJfcGFyYW1zICpwYXJzZXIsIE5PREUgKm5vZGUxLCBOT0RFICpub2Rl MikKK3sKKyAgICBjb25zdCBjaGFyICpydWJ5X25vZGVfbmFtZShpbnQpOwor CisgICAgaWYgKCFub2RlMSkgcmV0dXJuIG5vZGUyOworICAgIGlmICghbm9k ZTIpIHJldHVybiBub2RlMTsKKyAgICBzd2l0Y2ggKG5kX3R5cGUobm9kZTIp KSB7CisgICAgICBjYXNlIE5PREVfQVJSQVk6CisJcmV0dXJuIGxpc3RfY29u Y2F0KG5vZGUxLCBub2RlMik7CisgICAgICBjYXNlIE5PREVfQkxPQ0tfUEFT UzoKKwlub2RlMi0+bmRfaGVhZCA9IGFyZ19wcmVwZW5kKG5vZGUxLCBub2Rl Mi0+bmRfaGVhZCk7CisJcmV0dXJuIG5vZGUyOworICAgICAgY2FzZSBOT0RF X1NQTEFUOgorCW5vZGUyLT5uZF9ib2R5ID0gbm9kZTItPm5kX2hlYWQ7CisJ bm9kZTItPm5kX2hlYWQgPSBub2RlMTsKKwluZF9zZXRfdHlwZShub2RlMiwg Tk9ERV9BUkdTQ0FUKTsKKwlyZXR1cm4gbm9kZTI7CisgICAgICBjYXNlIE5P REVfQVJHU0NBVDoKKwlub2RlMi0+bmRfaGVhZCA9IGFyZ19wcmVwZW5kKG5v ZGUxLCBub2RlMi0+bmRfaGVhZCk7CisJcmV0dXJuIG5vZGUyOworICAgICAg Y2FzZSBOT0RFX0FSR1NQVVNIOgorCW5vZGUyLT5uZF9oZWFkID0gYXJnX3By ZXBlbmQobm9kZTEsIG5vZGUyLT5uZF9oZWFkKTsKKwlyZXR1cm4gbm9kZTI7 CisgICAgICBkZWZhdWx0OgorCWNvbXBpbGVfZXJyb3IoUEFSU0VSX0FSRyAi dW5oYW5kbGVkIG5vZGUgJXMiLCBydWJ5X25vZGVfbmFtZShuZF90eXBlKG5v ZGUyKSkpOworCXJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIE5PREUg Kgorc3ltYm9sX2xhbWJkYV9nZW4oc3RydWN0IHBhcnNlcl9wYXJhbXMgKnBh cnNlciwgSUQgbWlkLCBOT0RFICphcmdzKQoreworICAgIGNvbnN0IHN0cnVj dCB2dGFibGUgKnZhcnMgPSBkeW5hX3B1c2goKTsKKyAgICBJRCB0aWQgPSBp bnRlcm5hbF9pZCgpOworICAgIE5PREUgKmxhbWJkYSA9IE5FV19MQU1CREEo MCk7CisgICAgYXJnX3Zhcih0aWQpOworICAgIGxhbWJkYS0+bmRfYm9keSA9 IE5FV19TQ09QRShuZXdfYXJncyhORVdfQVJHU19BVVgodGlkLCAxKSwgMCwg MCwgMCwgMCksCisJCQkJTkVXX0NBTEwoTkVXX0RWQVIodGlkKSwgbWlkLCBh cmdzKSk7CisgICAgZHluYV9wb3AodmFycyk7CisgICAgcmV0dXJuIGxhbWJk YTsKK30KKworc3RhdGljIE5PREUgKgogc3BsYXRfYXJyYXkoTk9ERSogbm9k ZSkKIHsKICAgICBpZiAobmRfdHlwZShub2RlKSA9PSBOT0RFX1NQTEFUKSBu b2RlID0gbm9kZS0+bmRfaGVhZDsKZGlmZiAtLWdpdCBpL3Rlc3QvcnVieS90 ZXN0X3N5bWJvbC5yYiB3L3Rlc3QvcnVieS90ZXN0X3N5bWJvbC5yYgppbmRl eCA5MDYxZjE5Li4zNWM2MjhjIDEwMDY0NAotLS0gaS90ZXN0L3J1YnkvdGVz dF9zeW1ib2wucmIKKysrIHcvdGVzdC9ydWJ5L3Rlc3Rfc3ltYm9sLnJiCkBA IC04OCw2ICs4OCw5IEBAIGNsYXNzIFRlc3RTeW1ib2wgPCBUZXN0OjpVbml0 OjpUZXN0Q2FzZQogICAgICAgYXJ5X2lkcyA9IGFyeS5jb2xsZWN0e3x4fCB4 Lm9iamVjdF9pZCB9CiAgICAgICBhc3NlcnRfZXF1YWwgYXJ5X2lkcywgYXJ5 LmNvbGxlY3QoJjpvYmplY3RfaWQpCiAgICAgZW5kCisKKyAgICBhc3NlcnRf ZXF1YWwgWzIsIDQsIDZdLCAoMS4uMykubWFwKCY6KigyKSkKKyAgICBhc3Nl cnRfZXF1YWwgJXcoYiBlIGgpLCAld1thYmMgZGVmIGdoaV0ubWFwKCY6WzFd KQogICBlbmQKIAogICBkZWYgdGVzdF9jYWxsCg== --mimepart_4d0208b571f24_54b5b57a3722f9--