<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: for循环与each的区别</title>
	<atom:link href="http://www.letrails.cn/archives/difference-between-for-loop-and-each/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.letrails.cn/archives/difference-between-for-loop-and-each/</link>
	<description></description>
	<lastBuildDate>Mon, 02 Jan 2012 01:59:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>By: rails guy小抄大全 - RubyEE.org - about Ruby,Rails,Sinatra,Mac OS &#38; iPhone app</title>
		<link>http://www.letrails.cn/archives/difference-between-for-loop-and-each/comment-page-1/#comment-433</link>
		<dc:creator>rails guy小抄大全 - RubyEE.org - about Ruby,Rails,Sinatra,Mac OS &#38; iPhone app</dc:creator>
		<pubDate>Fri, 30 Jul 2010 02:34:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.letrails.cn/archives/for%e5%be%aa%e7%8e%af%e4%b8%8eeach%e7%9a%84%e5%8c%ba%e5%88%ab#comment-433</guid>
		<description>[...] for循环与each的区别(&#8211;&gt;認真看回復) http://www.letrails.cn/archives/difference-between-for-loop-and-each/ [...]</description>
		<content:encoded><![CDATA[<p>[...] for循环与each的区别(&#8211;&gt;認真看回復) <a href="http://www.letrails.cn/archives/difference-between-for-loop-and-each/" rel="nofollow">http://www.letrails.cn/archives/difference-between-for-loop-and-each/</a> [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yuanyi Zhang</title>
		<link>http://www.letrails.cn/archives/difference-between-for-loop-and-each/comment-page-1/#comment-232</link>
		<dc:creator>Yuanyi Zhang</dc:creator>
		<pubDate>Mon, 18 Feb 2008 03:20:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.letrails.cn/archives/for%e5%be%aa%e7%8e%af%e4%b8%8eeach%e7%9a%84%e5%8c%ba%e5%88%ab#comment-232</guid>
		<description>&lt;p&gt;你说的对，for的确是通过each实现的：&lt;/p&gt;
&lt;p&gt;&gt;&gt; a = &quot;1\n2\n&quot;&lt;br /&gt;
&gt;&gt; def a.each&lt;br /&gt;
&gt;&gt;   yield(1)&lt;br /&gt;
&gt;&gt; end&lt;br /&gt;
&gt;&gt; for i in a&lt;br /&gt;
&gt;&gt;   puts i&lt;br /&gt;
&gt;&gt; end&lt;br /&gt;
1&lt;br /&gt;
=&gt; nil&lt;/p&gt;
&lt;p&gt;只不过for在调用each之前先定义了一个局部变量：&lt;/p&gt;
&lt;p&gt;for i in [1, 2]  &lt;/p&gt;
&lt;p&gt;等于：&lt;/p&gt;
&lt;p&gt;i = nil&lt;br /&gt;
[1,2].each do &#124;i&#124; end&lt;/p&gt;
&lt;p&gt;也就是说for的问题在于它在each的scope外面定义了一个同名变量。&lt;/p&gt;
&lt;p&gt;帖子已更新&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>你说的对，for的确是通过each实现的：</p>
<p>&gt;&gt; a = &#8220;1\n2\n&#8221;<br />
&gt;&gt; def a.each<br />
&gt;&gt;   yield(1)<br />
&gt;&gt; end<br />
&gt;&gt; for i in a<br />
&gt;&gt;   puts i<br />
&gt;&gt; end<br />
1<br />
=&gt; nil</p>
<p>只不过for在调用each之前先定义了一个局部变量：</p>
<p>for i in [1, 2]  </p>
<p>等于：</p>
<p>i = nil<br />
[1,2].each do |i| end</p>
<p>也就是说for的问题在于它在each的scope外面定义了一个同名变量。</p>
<p>帖子已更新</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ShiningRay</title>
		<link>http://www.letrails.cn/archives/difference-between-for-loop-and-each/comment-page-1/#comment-231</link>
		<dc:creator>ShiningRay</dc:creator>
		<pubDate>Sun, 17 Feb 2008 12:54:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.letrails.cn/archives/for%e5%be%aa%e7%8e%af%e4%b8%8eeach%e7%9a%84%e5%8c%ba%e5%88%ab#comment-231</guid>
		<description>我认为应该还是是迭代器的问题，再例如Hash，each返回键值对

irb(main):011:0&gt; for i in {&#039;a&#039;=&gt; 1, &#039;b&#039; =&gt; 2, &#039;c&#039; =&gt; 3}
irb(main):012:1&gt; p i
irb(main):013:1&gt; end
[&quot;a&quot;, 1]
[&quot;b&quot;, 2]
[&quot;c&quot;, 3]
=&gt; {&quot;a&quot;=&gt;1, &quot;b&quot;=&gt;2, &quot;c&quot;=&gt;3}
irb(main):014:0&gt; {&#039;a&#039; =&gt; 1, &#039;b&#039; =&gt; 2, &#039;c&#039; =&gt; 3}.each do &#124;i&#124;
irb(main):015:1* p i
irb(main):016:1&gt; end
[&quot;a&quot;, 1]
[&quot;b&quot;, 2]
[&quot;c&quot;, 3]
=&gt; {&quot;a&quot;=&gt;1, &quot;b&quot;=&gt;2, &quot;c&quot;=&gt;3}

String，则会自动以回车分割

irb(main):028:0&gt; for i in &quot;a\nb\nc&quot;
irb(main):029:1&gt; p i
irb(main):030:1&gt; end
&quot;a\n&quot;
&quot;b\n&quot;
&quot;c&quot;
=&gt; &quot;a\nb\nc&quot;
irb(main):031:0&gt; &quot;a\nb\nc&quot;.each do &#124;i&#124;
irb(main):032:1* p i
irb(main):033:1&gt; end
&quot;a\n&quot;
&quot;b\n&quot;
&quot;c&quot;
=&gt; &quot;a\nb\nc&quot;

所以我认为for 绝对是内部调用迭代器each，这点应该和python类似，而不是for的intern_name是each</description>
		<content:encoded><![CDATA[<p>我认为应该还是是迭代器的问题，再例如Hash，each返回键值对</p>
<p>irb(main):011:0&gt; for i in {&#8216;a&#8217;=&gt; 1, &#8216;b&#8217; =&gt; 2, &#8216;c&#8217; =&gt; 3}<br />
irb(main):012:1&gt; p i<br />
irb(main):013:1&gt; end<br />
["a", 1]<br />
["b", 2]<br />
["c", 3]<br />
=&gt; {&#8220;a&#8221;=&gt;1, &#8220;b&#8221;=&gt;2, &#8220;c&#8221;=&gt;3}<br />
irb(main):014:0&gt; {&#8216;a&#8217; =&gt; 1, &#8216;b&#8217; =&gt; 2, &#8216;c&#8217; =&gt; 3}.each do |i|<br />
irb(main):015:1* p i<br />
irb(main):016:1&gt; end<br />
["a", 1]<br />
["b", 2]<br />
["c", 3]<br />
=&gt; {&#8220;a&#8221;=&gt;1, &#8220;b&#8221;=&gt;2, &#8220;c&#8221;=&gt;3}</p>
<p>String，则会自动以回车分割</p>
<p>irb(main):028:0&gt; for i in &#8220;a\nb\nc&#8221;<br />
irb(main):029:1&gt; p i<br />
irb(main):030:1&gt; end<br />
&#8220;a\n&#8221;<br />
&#8220;b\n&#8221;<br />
&#8220;c&#8221;<br />
=&gt; &#8220;a\nb\nc&#8221;<br />
irb(main):031:0&gt; &#8220;a\nb\nc&#8221;.each do |i|<br />
irb(main):032:1* p i<br />
irb(main):033:1&gt; end<br />
&#8220;a\n&#8221;<br />
&#8220;b\n&#8221;<br />
&#8220;c&#8221;<br />
=&gt; &#8220;a\nb\nc&#8221;</p>
<p>所以我认为for 绝对是内部调用迭代器each，这点应该和python类似，而不是for的intern_name是each</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: IceskYsl</title>
		<link>http://www.letrails.cn/archives/difference-between-for-loop-and-each/comment-page-1/#comment-230</link>
		<dc:creator>IceskYsl</dc:creator>
		<pubDate>Sat, 16 Feb 2008 12:28:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.letrails.cn/archives/for%e5%be%aa%e7%8e%af%e4%b8%8eeach%e7%9a%84%e5%8c%ba%e5%88%ab#comment-230</guid>
		<description>我一般使用 while 代替 for</description>
		<content:encoded><![CDATA[<p>我一般使用 while 代替 for</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: admin</title>
		<link>http://www.letrails.cn/archives/difference-between-for-loop-and-each/comment-page-1/#comment-229</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Sat, 16 Feb 2008 05:47:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.letrails.cn/archives/for%e5%be%aa%e7%8e%af%e4%b8%8eeach%e7%9a%84%e5%8c%ba%e5%88%ab#comment-229</guid>
		<description>each是Array类的一个方法，定义如下：

VALUE
rb_ary_each(ary)
    VALUE ary;
{
    long i;

    for (i=0; ilen; i++) {
	rb_yield(RARRAY(ary)-&gt;ptr[i]);
    }
    return ary;
}

for是Ruby关键字，由YACC生成的语法解析器直接执行，至于Backtrace，只是由于for的intern_name也是“each”，但for并没有调用each，它由语法分析器定义。</description>
		<content:encoded><![CDATA[<p>each是Array类的一个方法，定义如下：</p>
<p>VALUE<br />
rb_ary_each(ary)<br />
    VALUE ary;<br />
{<br />
    long i;</p>
<p>    for (i=0; ilen; i++) {<br />
	rb_yield(RARRAY(ary)-&gt;ptr[i]);<br />
    }<br />
    return ary;<br />
}</p>
<p>for是Ruby关键字，由YACC生成的语法解析器直接执行，至于Backtrace，只是由于for的intern_name也是“each”，但for并没有调用each，它由语法分析器定义。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ShiningRay</title>
		<link>http://www.letrails.cn/archives/difference-between-for-loop-and-each/comment-page-1/#comment-228</link>
		<dc:creator>ShiningRay</dc:creator>
		<pubDate>Sat, 16 Feb 2008 04:36:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.letrails.cn/archives/for%e5%be%aa%e7%8e%af%e4%b8%8eeach%e7%9a%84%e5%8c%ba%e5%88%ab#comment-228</guid>
		<description>for in do 
end
do可以省略
另外貌似for其实从根本上应该是调用each方法的
或者说，有个迭代器的概念在里面（我从Python的角度看）
因为出错的时候，for的块会显示为each?

irb(main):019:0&gt; for i in [1,2,3]
irb(main):020:1&gt; puts i / 0
irb(main):021:1&gt; end
ZeroDivisionError: divided by 0
        from (irb):20:in `/&#039;
        from (irb):20
        from (irb):19:in `each&#039;
        from (irb):19
        from :0</description>
		<content:encoded><![CDATA[<p>for in do<br />
end<br />
do可以省略<br />
另外貌似for其实从根本上应该是调用each方法的<br />
或者说，有个迭代器的概念在里面（我从Python的角度看）<br />
因为出错的时候，for的块会显示为each?</p>
<p>irb(main):019:0&gt; for i in [1,2,3]<br />
irb(main):020:1&gt; puts i / 0<br />
irb(main):021:1&gt; end<br />
ZeroDivisionError: divided by 0<br />
        from (irb):20:in `/&#8217;<br />
        from (irb):20<br />
        from (irb):19:in `each&#8217;<br />
        from (irb):19<br />
        from :0</p>
]]></content:encoded>
	</item>
</channel>
</rss>

