﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Dustin's Heartland-随笔分类-Rails &amp; Ruby</title><link>http://www.blogjava.net/DustinTang/category/12833.html</link><description>GDT</description><language>zh-cn</language><lastBuildDate>Thu, 08 Mar 2007 04:40:24 GMT</lastBuildDate><pubDate>Thu, 08 Mar 2007 04:40:24 GMT</pubDate><ttl>60</ttl><item><title>Ruby Syntactic Sugar</title><link>http://www.blogjava.net/DustinTang/archive/2006/07/06/56916.html</link><dc:creator>Dustin Tang</dc:creator><author>Dustin Tang</author><pubDate>Thu, 06 Jul 2006 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/DustinTang/archive/2006/07/06/56916.html</guid><wfw:comment>http://www.blogjava.net/DustinTang/comments/56916.html</wfw:comment><comments>http://www.blogjava.net/DustinTang/archive/2006/07/06/56916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DustinTang/comments/commentRss/56916.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DustinTang/services/trackbacks/56916.html</trackback:ping><description><![CDATA[有人说写Ruby就像写诗一样,咱就一土人, 没那么高境界. 我觉得写Ruby就像小时候吃糖, Ruby中就有各色各样的这种"语法糖果":<br />1. Hello World程序 <br /> Ruby : puts "Hello World!"<br /> java : public class HelloWorld {<br />   public static void main(String[] args) {<br />    System.out.println("Hello World!");<br />   }<br />  }<br />2. Every Thing is object<br /> Ruby : -1979.abs<br /> java : -1979.abs (Error! Sorry, -1979 is primary type, it should be Math.abs(-1979))<br />3. String<br /> "abcd\nefg" ==&gt; abcd换行efg<br /> 'abcd\nefg' ==&gt; abcd\nefg<br /> a=123, "abcd#{a}efg" ==&gt; abcd123efg 'abcd#{a}efg' ==&gt; abcd#{a}efg<br />4. Control Structure<br /> while line=gets<br />  puts line<br /> end<br /> puts line if line<br />5. Name convention<br /> Local Variable : local_variable<br /> Globle Variable : $globle_variable<br /> instance : @instance<br /> Class instance : @@class_instance<br /> Constant and Class Name : ClassName<br />6. Hash<br /> hash_map = {<br />  1 =&gt;"1",<br />  2 =&gt;"2"<br /> }<br /> hash_map[1] ==&gt; "1"<br />7. Regular Expression<br /> while line=gets<br />  puts line if line=~/Hello/<br /> end<br />8. Attribute<br /> A. <br />  def att=(att)<br />   @att=att<br />  end<br />  def att<br />   @att<br />  end<br />  class_object.att = 1;<br /> B. <br />  attr_reader :att<br />  attr_writer :att<br />  class_object.att = 1;<br />9. asignment<br /> a1, a2 = a2, a1<br />10. numbers<br /> num = 81<br /> 6.times do<br />  puts "#{num.class}: #{num}"<br />  num *= num<br /> end<br /> Result : <br /> Fixnum: 81<br /> Fixnum: 6561<br /> Fixnum: 43046721<br /> Bignum: 1853020188851841<br /> Bignum: 3433683820292512484657849089281<br /> Bignum: 11790184577738583171520872861412518665678211592275841109096961<br /> You can get number as big as you can, it depends your memory.<br />OK, I think for us, these are pretty much like opening acts, y'know? I mean it's like the stand-up comedian you have to sit through before Pink Floyd comes out.<br />下面出场的是Ruby中最大的糖果:<br />Blocks<br /> Blocks在java世界中最密集的地区可能就是Spring Framework了.而在Ruby世界中,Block随处可见.<br /> Block两种形式 :<br /> 单行 {内容在这里}<br /> 多行 do<br />  内容在这里<br />  还有这里<br />  end<br /> 1.upto(6) {puts "Hello, World!"} 打印六次Hello World<br /> 还可以带参数<br /> 1.upto(6) {|num| puts num} 打印1到6<br />原理(假代码)<br /> class Number<br />  def upto(up)<br />   ini = @num<br />   while ini &lt;= up<br />    yield(ini)<br />    ini+=1<br />   end<br />  end<br /> end<br /> 解释器将 {|num| puts num}作为Call对象传入, yield就是调用此Call对象的方法.<img src ="http://www.blogjava.net/DustinTang/aggbug/56916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DustinTang/" target="_blank">Dustin Tang</a> 2006-07-06 11:01 <a href="http://www.blogjava.net/DustinTang/archive/2006/07/06/56916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Best of Ruby Quiz</title><link>http://www.blogjava.net/DustinTang/archive/2006/07/05/56755.html</link><dc:creator>Dustin Tang</dc:creator><author>Dustin Tang</author><pubDate>Wed, 05 Jul 2006 06:50:00 GMT</pubDate><guid>http://www.blogjava.net/DustinTang/archive/2006/07/05/56755.html</guid><wfw:comment>http://www.blogjava.net/DustinTang/comments/56755.html</wfw:comment><comments>http://www.blogjava.net/DustinTang/archive/2006/07/05/56755.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/DustinTang/comments/commentRss/56755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DustinTang/services/trackbacks/56755.html</trackback:ping><description><![CDATA[一本好玩的书，里面有一些有趣的题目，　每天一题，　不亦乐乎<br />第一题　ＬＣＤ　Ｎｕｍｂｅｒｓ(电梯里面的数字见过吧, 把用户输入的数字转换为LCD的数字, 长7个字, 高7个字)<br /><br />我的代码(初学者,大家就原谅则个)<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> LCDNumber<br />  @@number_code </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> {<br />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> 0b1110111,<br />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> 0b0100100,<br />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> 0b1011101,<br />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> 0b1101101,<br />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> 0b0101110,<br />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> 0b1101011,<br />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> 0b1111011,<br />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> 0b0100101,<br />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> 0b1111111,<br />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=&gt;</span><span style="COLOR: #000000"> 0b1101111<br />  }<br />  def initialize(num)<br />    @num </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> num<br />  end<br />  def getZone(zone)<br />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> ((@@number_code[@num] </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> zone)) </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">) <br />      st </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> zone </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> -- </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> : (zone </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">| </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> : </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> |</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br />    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br />      st </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> zone </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> : </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">  </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />    end<br />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> st<br />  end<br />  attr_reader :num<br />end<br />def get(zone, array)<br />  s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> lcd_number in array<br />    s </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> (zone </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"> lcd_number.getZone(zone) : (zone </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"> lcd_number.getZone(zone) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> lcd_number.getZone(zone</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) :  lcd_number.getZone(zone</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> lcd_number.getZone(zone)))<br />  end<br />  </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> s<br />end<br />require </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stringio</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> line</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gets<br />  a </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Array.</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"><br />  si </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> StringIO.</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">(line);<br />  </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">si.read(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br />    a.push(LCDNumber.</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">(c)) </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (c </span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> c </span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br />  end<br />  </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">.upto(</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">) {</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">line</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000"> puts get(line, a)}<br />end<br /></span></div><img src ="http://www.blogjava.net/DustinTang/aggbug/56755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DustinTang/" target="_blank">Dustin Tang</a> 2006-07-05 14:50 <a href="http://www.blogjava.net/DustinTang/archive/2006/07/05/56755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>