[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-core
Subject:    [ruby-core:35368] [Ruby 1.9 - Bug #4442] [Open] odd evaluation order in a multiple assignment
From:       Yusuke Endoh <mame () tsg ! ne ! jp>
Date:       2011-02-24 14:23:58
Message-ID: redmine.issue-4442.20110224232701 () ruby-lang ! org
[Download RAW message or body]


Issue #4442 has been reported by Yusuke Endoh.

----------------------------------------
Bug #4442: odd evaluation order in a multiple assignment
http://redmine.ruby-lang.org/issues/4442

Author: Yusuke Endoh
Status: Open
Priority: Normal
Assignee: Yukihiro Matsumoto
Category: 
Target version: 
ruby -v: ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]


้ ่—คใงใ™ใ€‚core ใซๆŠ•ใ’ใฆใ—ใพใฃใŸใ‚ˆใ†ใชใฎใง็™ป้Œฒใ—็›ดใ—ใ€‚

Ruby ใฏๅทฆใ‹ใ‚‰ๅณใซ่ฉ•ไพกใŒ้€ฒใ‚€ใจไฟกใ˜ใฆใ„ใŸใฎใงใ™ใŒใ€ๅคš้‡ไปฃๅ…ฅใง่ฃๅˆ‡ใ‚‰ใ‚Œใพใ—ใŸใ€‚


  def foo
    p :foo
    []
  end
  def bar
    p :bar
  end

  x, foo[0] = bar, 0

bar ใ‚ˆใ‚Š foo ใŒๅทฆใซใ‚ใ‚‹ใฎใงใ€:foo ใ€:bar ใฎ้ \
†ใซๅ‡บๅŠ›ใ•ใ‚Œใ‚‹ใ“ใจใ‚’ๆœŸๅพ…ใ™ใ‚‹ใฎใงใ™ใŒใ€ใชใ‚“ใจ :bar ใ€:foo \
ใซใชใ‚Šใพใ™ใ€‚

ๅ…ทไฝ“็š„ใซไฝ•ใŒๅ›ฐใ‚‹ใ‹ใจใ„ใ†ใจใ€ไพ‹ใˆใฐ

  obj, obj.foo = obj.foo, obj

ใซใฏ swap ใ‚’ๆœŸๅพ…ใ™ใ‚‹ใ‚ใ‘ใงใ™ใŒใ€ใใ†ใชใ‚Šใพใ›ใ‚“ใ€‚ใ“ใ†ใ„ใ†ใ‚ณใƒ \
ผใƒ‰ใฏๅฎŸ้š›ใซใ€ๆœจใฎๅ›ž่ปขใชใฉใ‚’ๅฎŸ่ฃ…ใ™ใ‚‹ใจใใซใ—ใฐใ—ใฐๆ›ธใใŸใใชใ‚Šใพใ™ใ€‚ใ“ใฎๆŒ™ๅ‹•ใซๆฐ—ใŒใคใ„ใŸใฎใ‚‚ \
splay tree ใ‚’ๅฎŸ่ฃ…ใ—ใฆใ„ใŸใจใใงใ—ใŸใ€‚ใ“ใ‚“ใชใฎ:

  t.left, t.left.right, t = t.left.right, t, t.left

1.9 ็ณปๅˆ—ใงไฟฎๆญฃใ™ในใใจใพใงใฏๆ€ใ„ใพใ›ใ‚“ใŒใ€2.0 \
ใง็›ดใ‚‹ๅฏ่ƒฝๆ€งใฏใ‚ใ‚‹ใงใ—ใ‚‡ใ†ใ‹ใ€‚

IRC ใง่ฉฑใ—ใŸใ‚‰ใ€Œใใ‚Œใงๆ™ฎ้€šใ€ใฟใŸใ„ใชๅๅฟœใ‚‚ใ‚ใ‚Šใพใ—ใŸใŒใ€

  foo[0] = bar

ใฏใกใ‚ƒใ‚“ใจ :foo ใ€:bar ใฎ้ †ใซๅ‡บใพใ™ใ€‚

-- 
Yusuke Endoh <mame@tsg.ne.jp>


-- 
http://redmine.ruby-lang.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic