From: keiju@... (ÀÐÄÍ·½¼ù ) Date: 1997-02-16T01:10:56+09:00 Subject: [ruby-list:2143] Re: [BUG] for line in $< ã‘ã„ã˜ã‚…ï¼ SHLジャパンã§ã™. In [ruby-list :02142 ] the message: "[ruby-list:2142] Re: [BUG] for line in $< ", on Feb/15 18:35(+0200) matz@caelum.co.jp (Yukihiro Matsumoto) writes: >|[1] $<.type >ãã†ã§ã™ï¼Žã“ã®ã‚ˆã†ãªã‚‚ã®ã«ã¯ã»ã‹ã«main(トップレベルã®self)ã‚„ >ENVãŒã‚りã¾ã™ï¼Ž んー. ãªã‚‹ã»ã©... ãªã‹ãªã‹å¥¥ãŒæ·±ã„ã§ã™ã­. >|[2] cloneã®å®šç¾© >特異クラスを継承ã—ã¦ã„ã‚‹ã¨ã„ã†ã®ã¯ã‚€ãšã‹ã—ã„表ç¾ã§ã™ã­ï¼Ž >cloneã¯ç‰¹ç•°ãƒ¡ã‚½ãƒƒãƒ‰ã‚‚å«ã‚ã¦ç¶™æ‰¿ã—ã¦ã„ã‚‹ã¨è¡¨ç¾ã—ã¦ãã ã•ã„. >rubyã®å®Ÿè¡Œãƒ¢ãƒ‡ãƒ«ã«ã¯ã€Œç‰¹ç•°ã‚¯ãƒ©ã‚¹ã€ã¨ã„ã†ã‚‚ã®ã¯ã‚りã¾ã›ã‚“.㓠>れã¯å®Ÿè£…上ã®éƒ½åˆã§ã™ï¼Ž ã©ã†ã‚‚実装上ã®è©±ã—ãŒã“ã³ã‚Šä»˜ã„ã¦ã—ã¾ã£ã¦ã„ã¦... 以後気をã¤ã‘ã¾ã™. # ã“ã®MLを読んã§ã„ã‚‹ä»–ã®äººã«ã‚‚良ããªã„影響ãŒã‚りã¾ã™ã—ã­. >|[3] 特異クラスã®ç¶™æ‰¿ >特異メソッドをå«ã‚ã¦ã‚ªãƒ–ジェクトをコピーã™ã‚‹æ‰‹æ®µã¯cloneã—ã‹ >ã‚りã¾ã›ã‚“.ã¡ãªã¿ã«dupã¯ã€ŒåŒã˜å†…容ã®ã‚ªãƒ–ジェクトを作るã€ã“ >ã¨ã—ã‹ä¿è¨¼ã—ã¦ã„ã¾ã›ã‚“.実際ã¯ãƒ‡ãƒ•ォルトã®å‹•作ã§ã¯cloneã—㦠>ã„ã¾ã™ã‘ã©ï¼Ž ãã†ã™ã‚‹ã¨, dupã¨cloneã¯é•ã†ãƒ¡ã‚½ãƒƒãƒ‰ãªã®? >|[4] cloneã®å†å®šç¾© >「特異メソッドをå«ã‚ã¦è¤‡è£½ã™ã‚‹ã€ã§ã™ã­ï¼Žãã®æ–¹ãŒè‰¯ã„ã¨æ€ã„ã¾ã™ï¼Ž 了解ã—ã¾ã—ãŸ. >|[5] ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ¯”較 >ã§ããªã„ã§ã—ょã†ã­ï¼Žç‰¹ç•°ã‚¯ãƒ©ã‚¹ãã®ã‚‚ã®ãŒrubyã‹ã‚‰ã¯ã¿ãˆãªã„概 >念ã§ã™ã‹ã‚‰ï¼Œãれを使ã£ã¦æ¯”較ã™ã‚‹ã“ã¨ã¯rubyã®ç¯„囲内ã§ã¯ã§ãã¾ >ã›ã‚“.もã¡ã‚ん,Cã§ãƒ¡ã‚½ãƒƒãƒ‰ã‚’追加ã™ã‚Œã°å¯èƒ½ã§ã™ã‘ã©ï¼Œãã®å ´ >åˆã§ã‚‚,cloneã¯ç‰¹ç•°ã‚¯ãƒ©ã‚¹ã‚’共有ã™ã‚‹ã®ã§ã¯ãªã,特異クラス㮠>コピーを作ã£ã¦ã„ã¾ã™ã‹ã‚‰ï¼Œå˜ç´”ãªæ¯”較ã§ã¯ã™ã¾ãªã„ã§ã—ょã†ã­ï¼Ž ># 特異メソッドã«é–¢ã—ã¦ã¯Self(言語)ã®ãƒ¢ãƒ‡ãƒ«ã‚’想åƒã—ã¦ãã ã•ã„. ># 実装ã«ã¨ã‚‰ã‚れã¦ç‰¹ç•°ã‚¯ãƒ©ã‚¹ã®ã“ã¨ã‚’考ãˆã‚‹ã¨æ··ä¹±ã—ã¾ã™ï¼Ž ãªã‚‹ã»ã©. ãã®é€šã‚Šã§ã™ã­. # Selfã¨ã„ã£ã¦åˆ†ã‹ã‚‹äººã¯ã‚ã¾ã‚Šã„ãªã„ã¨ãŠã‚‚ã„ã¾ã™ãŒ... ã¨ã„ã†ã“ã¨ã¯, ã“れã£ã¦, çµæ§‹é‡è¦ãªã“ã¨ã‚’言ã£ã¦ã„るよã†ãªæ°—ãŒã—ã¾ã™. åŒã˜æŒ¯èˆžã„ã‚’ã™ã‚‹ã‚ªãƒ–ジェクトã‹ã©ã†ã‹ã‚’比較ã™ã‚‹å¿…è¦ã¯ãªã„よã†ã«ãƒ—ログラ ムを組ã¾ãªãã¦ã¯ãªã‚‰ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã‚ˆã­? 例ãˆã°, 特異メソッドをæŒãŸãªã„一般ã®ã‚ªãƒ–ジェクトã§ã¯ã‚¯ãƒ©ã‚¹ã‚’比較ã—ã¦ã® 処ç†ã®æŒ¯ã‚Šåˆ†ã‘ã¯ãれãªã‚Šã«æ„味ãŒã‚ã‚‹ã¨æ€ã„ã¾ã™ãŒ, 例ãˆã°: def foo ... case o.type when Foo ... when Bar ... end ... end ãªã©ã§ã™ã­. 特異メソッドをæŒã¤ã‚ªãƒ–ジェクトã®ã“ã¨ã‚’考ãˆã‚‹ã¨ä¸Šè¨˜ã®ã‚ˆã†ãª 処ç†ã¯ã‚ã¾ã‚Šè‰¯ããªã„ã“ã¨ã«ãªã‚‹ã‚“ã§ã™ã‹ã­? ã“れã ã¨, 特異メソッドを定義 ã—ãŸã“ã¨ã«ã‚ˆã£ã¦æ­£ç¢ºãŒå¤‰ã‚ã£ãŸã‚ªãƒ–ジェクトã«å¯¾ã—ã¦, é©åˆ‡ãªå‡¦ç†ã‚’行ã†ã“ ã¨ã¯ã§ãã¾ã›ã‚“ã®ã§... 上記ã®ã‚ˆã†ãªæ–¹æ³•よりも, 例ãˆã°, ダブルディスパッ ãƒã§å‡¦ç†ã‚’振り分ã‘ã‚‹æ–¹ãŒè‰¯ã„ã£ã¦ã“ã¨ã«ãªã‚‹ã‚“ã§ã™ã­... def foo ... o.dispatch ... end class Foo def dispatch ... end end def special_obj.dispatch ... end __ .....................................石塚 圭樹@SHLジャパン(æ ª)... ------------->アドレス変ã‚りã¾ã—ãŸ!! e-mail: keiju@shljapan.co.jp <----