Ruby菜鸟必读http://blog.csdn.net/leasun/archive/2004/06/16/9836.aspx

2023-05-16

作者:William Djaja Tjokroaminata

目录

·资源

1、利用警告信息
2、交互式命令解释器(Interactive shell)
3、联机文档
4、Class#method
5、从字符串中获取字符
6、数组和哈希表的默认值
7、可变的哈希表键
8、从文件中读取数字
9、前缀自加/自减操作符和后缀自加/自减操作符
10、语句块中的符号作用域
11、两套逻辑运算符
12、===运算符和case语句
13、白空格
14、“点”——方法调用操作符
15、范围(Range)对象
16、布尔值
17、变量、引用和对象
18、深度拷贝
19、类变量
20、替换反斜线

·你最好知道


·资源:

主页:http://www.ruby-lang.org/en/
FAQ:http://www.rubycentral.com/faq/(旧版)
    http://www.rubygarden.org/iowa/faqtotum(最新版)
缺陷:http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=pitfall
网上教程/文档/书籍:http://www.rubycentral.com/book/
有用的信息:
◎David Thomas和Andrew Hunt所著《Programming Ruby》一书,“When Trouble Strikes”一章中,“But It Doesn't Work”节
◎Hal Fulton所著《The Ruby Way》,第一章“Ruby In Review”

1、使用“ruby -w”代替简单的“ruby”以获得有用的警告信息。如果你不是直接调用“ruby”,那么你可以将环境变量RUBYOPT设置为“w”:
   ·Win32:
         C:/> set RUBYOPT=w
     或者
         在Scite editor中按F5(执行)就可以得到警告信息(F4可以定位有问题的行)。
   ·UNIX:
         sh# export RUBYOPT="w"
     或者
         csh# setenv RUBYOPT "w"

2、Ruby有一个交互式命令解释器,你可以键入“irb”来调用。“irb”是进行语言和类试验的最好工具,你可以在“irb”中验证你的代码,然后再把它添加到你的程序中。

3、要获得方便的联机帮助,请使用(如果没有安装请先安装)“ri”(http://www.pragmaticprogrammer.com/ruby/downloads/ri.html)。
例如,要查看File类的方法,键入“ri File”。要获得它的open方法的更多内容,键入“ri File.open”。

4、文档中“Klass#method”表示一个Klass类对象所具有的一个“实例方法”,它并不是Ruby的语法。另外,在文档中一个“类方法”的表示方法为“Klass.method”(这是一个正确的Ruby语法)。

5、String#[Fixnum]方法并不返回Fixnum位置上的“字符”(就是长度为1的字符串),而是返回字符对应的ASCII码(在Ruby未来的版本中可能会改变)。眼下,为了获得字符本身,要使用String#[Fixnum, 1]。
此外,还有一些其它的ASCII转换方法可供使用:
·Integer#chr将ASCII转换为对应的字符
      65.chr   # -> "A"
·?chr将字符转换为ASCII码
      ?A          # -> 65
    举个例子,如果要用以上方法获取字符串中的最后一个字符,可以这样“aString[-1, 1]”,或者“aString[-1].chr”。

6、Array.new(2, Hash.new)   # -> [{}, {}]
但是数组中的两个元素是同一个对象,而不是独立的哈希表。要创建包含(独立的)哈希表的数组,请使用“map”或“collect”方法:
   arr = (1..2).map {Hash.new}
同样,要创建一个数组哈希表,下面的代码可能也达不到目的:
   hsh = Hash.new([])
   while line = gets
       >if line =~/(/S+)/s+(/S+)/
           hsh[$1] << $2
       end
   end
   puts hsh.length    # -> 0
另一个正确且简洁的方法是“(hash[key] ||= []) <<value”,比如
   hsh = Hash.new
   while line = gets
       if line =~/(/S+)/s+(/S+)/
           (hsh[$1] ||= []) << $2
       end
   end

7、使用“可变”对象作为哈希表的键时要小心。要获得期望的结果,在访问哈希表元素前记得调用Hash#rehash。例如:
   s = "mutable"
   arr = [s]
   hsh = { arr => "object" }
   s.upcase!
   p hsh[arr]   # -> nil (也许不是期望获得的结果)
   hsh.rehash
   p hsh[arr]   # -> "object"

8、当从文件中读取数据到变量时,这些变量的类型是String。要把它们转换为数字,使用“to_i”或者“to_f”方法。假如——举个例子——你没有调用这些转换方法就直接使用“+”运算符对两个“数字”相加,那么你只是在连接字符串。
另一个可选的方法是使用“scanf”(http://www.rubyhacker.com/code/scanf)。

9、Ruby没有诸如x++或者x--这样的前缀和后缀自加/自减运算符,类似的语句将导致解析错误。更要命的是,++x或者--x这样的语句将不会有任何作用!事实上,它们的行为和多个一元前缀运算符相同:-x == ---x == -----x == ……要自加一个数,这样:x += 1。
(对于为什么这样设计,你可以在http://www.ruby-talk.org/2710找到一个作者本人的解释。)

10、注意区分局部变量和块局部变量在作用域上的区别。如果在一个语句块前局部变量已经被定义,那么语句块将直接使用这个变量(而且很有可能改变这个变量),在这种情况下语句块并不会引入新的作用域。例如:
   (0..2).each do |i|
       puts "inside block: i = #{i}"
   end
   puts "outside block: i = #{i}"   # -> 未定义'i'
另一方面,
   i = 0
   (0..2).each do |i|
       puts "inside block: i = #{i}"
   end
   puts "outside block: i = #{i}"   # -> 'outside block: i = 2'

   j = 0
   (0..2).each do |i|
       j = i
   end
   puts "outside block: j = #{j}"   # -> 'outside block: j = 2'

11、在Ruby中有两套逻辑运算符:[!,&&,||]和[not,and,or]。[!,&&,||]的优先级高于赋值运算符(=,%=,~=,/=等等),而[not,and,or]的优先级则低于赋值运算符。另外要注意,&&的优先级高于||,而and的优先级则与or相同。举个例子:
   a = 'test'
   b = nil
   both = a && b      # both == nil
   both = a and b     # both == 'test'
   both = (a and b)   # both == nil

(在http://www.rubygarden.org/iowa/faqtotum/abN18mrYFE49E/c/1.13.3.3.5你可以找到这个语言设计的原因和一些例子。)

12、case语句
   case obj
   when obj_1
       ....
   when obj_k
       ....
中,调用的是“===”方法而不是“==”方法。另外,运算的顺序是“obj_k === obj”而不是“obj === obj_k”。
以这样的顺序进行运算可以使Ruby更灵活的匹配obj。有意思的是当obj_k分别为Module/Class、Regexp和Range时:
·Module/Class类定义了“===”方法,用于测试obj是否是此模块/类的实例或者其派生类的实例(“obj#kind_of?obj_k”)。
·Regexp类定义了“===”方法,用于判断obj是否匹配此模式(“obj =~ obj_k”)。
·Range类定义了“===”方法,用于判断obj是否是此范围中的一个元素(“obj_k.include?obj”)。

13、在调用方法时,不要在括号“(”前加空格。另外,如果你将$VERBOSE设为true,那么Ruby将因此产生一个警告。

14、用于函数调用的“点”运算符是最强的运算符。因此,在Ruby中表示浮点数的小数点后必须是数字,而在其它许多语言中并没有这个要求。例如,“1.e6”将会调用对象1(一个Fixnum对象)的方法“e6”。你必须使用“1.0e6”。

不过注意,尽管“点”运算符是最强的运算符,但是与方法名连用时,不同版本的Ruby表现是不一样的。至少在Ruby1.6.7中,“puts (1..3).length”将会产生一个语法错误,此时应该使用“puts((1..3).length)”。

15、“0..k”代表一个Range对象,而“[0..k]”代表一个数组,这个数组只有一个Range类型的元素。
举个例子,如果
   [0..2].each do |i|
       puts "i = #{i}"
   end
没有给出你想要的结果,那么你也许应该试试
   (0..2).each do |i|
       puts "i = #{i}"
   end
或者
   0.upto(2) do |i|
       puts "i = #{i}"
   end
注意Ruby没有元组(不可变的数组)类型的对象,而括号也经常放在Range对象周围以确保优先级正确(例如上例中“点”运算符强于“点点”运算符)。

16、在Ruby中,只有false和nil在布尔运算中被认为是false。特别是0(零),“”和‘’(空字符串),[](空数组),{}(空哈希表)都被认为是true。

17、Ruby中的变量只保存对象的引用,因此使用=运算符时仅复制引用本身。另外,诸如a += b的自赋值也被转换为a = a + b的形式。因此你最好知道某个操作究竟是创建了一个新的对象还是改变了一个已经存在的对象。
例如,string << "another"比string += "another"快(没有创建额外的对象),所以你理所当然应该使用某个类已经定义的更新函数(如果你真的想这么做)。不过,小心“边界效应”,它会影响所有其它引用同一个对象的变量:
   a = 'aString'
   c = a
   a += ' modified using +='
   puts c   # -> "aString"

   a = 'aString'
   c = a
   a << ' modified using <<'
   puts c   # -> "aString modified using <<"

18、在Ruby中没有标准的内建深度拷贝方法。要获得相同的效果可以使用序列化/排列(serialization/marshalling)技术。因为在Ruby中所有的东西都是引用,所以“拷贝”对象(比如通过dup或clone方法)时要小心,尤其是拷贝那些包含其它对象的对象(比如数组和哈希表)且包含的深度又超过一层时。

19、一般情况下,一个类变量是属于整个继承链而不仅仅是类本身的(比如,一个类变量由父类及其所有派生类所“共享”的)。令人迷惑的是,如果一个子类在其父类之前创建了类变量,那么情况就不同了。例如,如果一个父类首先创建了一个类变量:
   class Base
       def initialize
           @@var = 'base'
       end

       def base_set_var
           @@var = 'base'
       end

       def base_print_var
           puts @@var
       end
   end

   class Derived < Base
       def initialize
           super
           @@var = 'derived'
       end # notice

       def derived_set_var
           @@var = 'derived'
       end

       def derived_print_var
           puts @@var
       end
   end

   d = Derived.new
   d.base_set_var
   d.derived_print_var   # -> 'base'
   d.base_print_var      # -> 'base'
   d.derived_set_var
   d.derived_print_var   # -> 'derived'
   d.base_print_var      # -> 'derived'
在上面这段代码中,类变量@@var实际上是被基类和派生类所“共享”的。现在再来看看如果一个子类先创建类变量会发生什么:
   class Base
       def initialize
           @@var = 'base'
       end

       
def base_set_var
           @@var = 'base'
       end

       def base_print_var
           puts @@var
       end
   end

   class Derived < Base
       def initialize
           @@var = 'derived'
           super
       end # changed

       def derived_set_var
           @@var = 'derived'
       end

       def derived_print_var
           puts @@var
       end
   end

   d = Derived.new
   d.base_set_var
   d.derived_print_var   # -> 'derived'
   d.base_print_var      # -> 'base'
   d.derived_set_var
   d.derived_print_var   # -> 'derived'
   d.base_print_var      # -> 'base'
在这种情况下,父类和子类就具有了两个相互独立但又具有相同名字的类变量。

20、反斜线的替换是比较奇特的。例如:
   str = 'a/b/c'                    # -> a/b/c
   puts str.gsub(,'')        # -> a/b/c
   puts str.gsub(,'//')     # -> a//b//c
   puts str.gsub(,'')   # -> a//b//c
   puts str.gsub() { '' }   # -> a//b//c
   puts str.gsub(, '/&/&')       # ->a//b//c

·你最好知道
a.在Ruby中,“自赋值运算符”不止是“+=,-=,*=,/=,%=”这几个。尤其是像“||=”这样的运算符也是可用的(目前这些运算符还不能作用于未定义的类变量,不过在将来版本的Ruby中可能会有所改变)。完整的列表请参考《Programming Ruby》一书中的表18.4。

b.在“PLEAC-Ruby”(http://pleac.sourceforge.net/pleac_ruby/t1.html)上有一个包含很多算法和例程的手册。

c.在“Numerical Ruby”(http://www.ir.isas.ac.jp/~masa/ruby/index-e.html)上有更多关于数字计算的信息。

d.在“Numerical Ruby”(http://www.ir.isas.ac.jp/~masa/ruby/na/SPEC.en)上还有一个“NArray”,它比Ruby本身的(数字)数组占用更少的内存,运行速度也较快。

e.要在Ruby中嵌入C语言编写的代码以提高Ruby代码的运行速度,请参考“Inline”(http://sourceforge.net/projects/rubyinline/)。

f.要将Ruby程序代码转换为C程序代码,请参考“rb2c”(http://easter.kuee.kyoto-u.ac.jp/~hiwada/ruby/rb2c/)。

g.要集成Ruby和C/C++,请参考“SWIG”(http://www.swig.org/)。

h.要集成Ruby和Java,请参考“JRuby”(http://jruby.sourceforge.net/)。

i.要集成Ruby和Delphi,请参考“Apollo”(http://www.users.yun.co.jp/~moriq/apollo/index-en.html)。

j.要在Ruby中嵌入Python,请参考“Ruby/Python”(http://www.ruby-lang.org/en/raa-list.rhtml?name=Ruby%2FPython)。

k.要在Ruby中嵌入Lua,请参考“Ruby-Lua”(http://ruby-lua.unolotiene.com/ruby-lua.whtm)。

l.要通过Ruby创建Windows下的可执行程序,请参考“exerb”(http://exerb.sourceforge.jp/index.en.html)。

m.要操作原始的二进制位而不是使用Fixnum,请参考“BitVector”(http://www.ce.chalmers.se/~feldt/ruby/extensions/bitvector/)。

·任何关于本文档的问题请致信mailto:billtj@glue.umd.edu。
·任何关于本文档简体中文版的问题请致信mailto:leasun@yeah.net。

最后更新:2002年11月25日
本文档英文版可在http://www.glue.umd.edu/~billtj/ruby.html找到。

http://www.xuyiting.com

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby菜鸟必读http://blog.csdn.net/leasun/archive/2004/06/16/9836.aspx 的相关文章

  • TPL 数据流块下游如何获取源生成的数据?

    我正在使用 TPL Dataflow 处理图像 我收到处理请求 从流中读取图像 应用多次转换 然后将生成的图像写入另一个流 Request gt Stream gt Image gt Image gt Stream 为此 我使用块 Buff
  • 在 Java 服务器中验证 Windows 用户

    我正在开发一个用 Java 编写的服务器和一个在同一网络上的 Windows 计算机上运行的客户端 用 Net 编写的桌面应用程序 我希望进行一些基本身份验证 以便服务器可以确定运行客户端的用户的用户名 而不需要用户在客户端中重新输入其 W
  • Windows 服务:错误 5:访问被拒绝

    我正在尝试创建一个简单的 Windows 服务 该服务的用户帐户是NetworkService 然后我跑了installUtil从命令提示符我得到了这个 提交阶段完成 成功地 事务安装已完成 这意味着服务已成功安装 但是当我尝试从Servi
  • 为什么使用 HTTP 动词?

    因为动词的目标是像 server domain getallrecords 或 server domain delete1record 或类似的 URL 而getallrecords delete1record都是专门为特定目的而设计的 为
  • 如何修复 AJAX 在选中复选框时始终触发?

    有时这个 AJAX 会触发 有时不会 让我解释一下 habit js document ready function habit check change function habit this parent siblings habit
  • 禁止/阻止选择 wpf 中禁用的组合框项目

    我正在编写一个应用程序 其中我想禁用其中的一些项目ComboBox并且还想禁止 阻止选择禁用的项目 请注意ComboBox在主窗口中有另一个 ComboBox 作为 ComboBox Item init 在运行时由DataTemplateS
  • 使用 linq 组合对象

    我有一个类的 2 个实例 它实现了IEnumerable界面 我想创建一个新对象并将它们合并为一个 我明白我可以使用for each去做这个 有 linq lambda 表达式的方法可以做到这一点吗 EDIT public class Me
  • 考虑周末和节假日,添加迄今为止的工作日

    给定一个日期和假期列表 如何将给定的工作日数添加到该日期 对于不考虑假期的较小问题有很多解决方案 例如参见向日期添加天数但不包括周末 https stackoverflow com questions 279296 adding days
  • Mongoid 4 / MongoDB 2.4+“冻结”问题

    自从使用 Mongoid 维护与 mongodb 的连接以来 我遇到了一个奇怪的问题 我认为这最初是由于升级到 Rails 4 0 需要更新 Mongoid Moped 但我在其他基于 Rack 的应用程序 具体来说是 Sinatra 和
  • Rails_admin 中的范围作为过滤器

    我在我的应用程序中使用rails admin 我的模型上有一些范围 以下是一个示例 class User lt ActiveRecord Base scope unconfirmed where confirmed at IS NULL e
  • 如何提取括号(圆括号)之间的文本?

    我有一根绳子User name sales 我想提取括号之间的文本 我该怎么做 我怀疑子字符串 但我无法弄清楚如何阅读 直到右括号 文本的长度会有所不同 如果您希望远离正则表达式 我能想到的最简单的方法是 string input User
  • 有人有 Postsharp 制作经验吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Rails——理解 db:migrate

    我在理解 Ruby on Rails 中的迁移时遇到了一些困难 我的应用程序中有以下两个类db migrate 目录 存储在单独的文件中 class CreateUsers lt ActiveRecord Migration def sel
  • 编译时和运行时转换 C#

    我想知道为什么 C 中的某些强制转换会在编译时进行检查 而在其他情况下则将责任转嫁给 CLR 如上所述 两者都是不正确的 但处理方式不同 class Base class Derived Base class Other static vo
  • wait task.delay 有助于加快 UI 刷新速度,但是如何实现呢?

    我有一个视图模型 它正在获取一行记录并显示在 Windows Phone UI 上 这个获取数据的视图模型方法正在执行大量任务 所有任务都标记为等待操作 如下所示 async Task GetData var dataCollection
  • 如何从对Web服务发出的请求中获取客户端IP地址

    我的 IIS 中托管有一个 Web 服务 当客户端直接使用我的服务时 我需要找出客户端 IP 地址 like http MyIpAddress MyApplication MyWebServiceClass asmx http MyIpAd
  • C# 中输入按键

    我尝试了这段代码 private void textBox1 KeyPress object sender KeyPressEventArgs e if Convert ToInt32 e KeyChar 13 MessageBox Sho
  • C# 事务中的事务

    我正在使用 C 将发票的平面文件导入到数据库中 如果遇到问题 我将使用 TransactionScope 回滚整个操作 这是一个棘手的输入文件 因为一行不一定等于一条记录 它还包括链接记录 发票将包含标题行 行项目和总计行 有些发票需要跳过
  • POST 后使用 303 重定向以避免“网页已过期”:如果字节数超过 GET 请求可以处理的字节数,它会工作吗?

    我想解决 网页已过期 问题 首先 我刚刚将 POST 更改为 GET 但这导致出现错误 我的 HTTP 请求超出了 GET 的最大大小 所以 现在我想尝试下面链接中描述的技术 帖子 303 重定向 但是我仍然会遇到相同的大小限制问题吗 对
  • 使用 Ruby CSV 标头转换器

    假设我有以下课程 class Buyer lt ActiveRecord Base attr accesible first name last name 以及 CSV 文件中的以下内容 First Name Last Name John

随机推荐

  • Linux网络编程3——多进/线程并发服务器

    视频链接 黑马程序员 Linux网络编程 哔哩哔哩 bilibili https www bilibili com video BV1iJ411S7UA p 61 37 目录 一 高并发服务器 1 1 图示 1 2 分类 二 多进程并发服务
  • http请求头和响应头

    文章目录 参考HTTP通用标头Cache ControlConnectionDatePragmaTrailerTransfer EncodingUpgradeViaWarning 请求头AcceptAccept RangesAccept E
  • C++如何使用libcurl发送post请求的三种content-type的封装

    作者 xff1a 虚坏叔叔 博客 xff1a https xuhss com 早餐店不会开到晚上 xff0c 想吃的人早就来了 xff01 x1f604 C 43 43 如何使用libcurl发送post请求的三种content type的
  • 开源四轴飞行器CC3D的稳定模式和PID算法简介

    本文主要介绍一下CC3D的两大飞行模式的原理 xff1a 1 Rate 2 Attitude 以及PID的基本原理 至于AxisLock模式及Manual xff0c 日后续说 笔者是CC3D开源飞控入门玩家 xff0c 遇到过不少磕磕碰碰
  • 了解git分支和版本管理

    0 Git分支和标签的命名规范 1 分支 dev test pre pro 即master 2 标签 Tag格式 xff1a 主版本号 次版本号 修订号 类型标签 xff0c 其中类型标签可为 xff1a alpha beta rc r T
  • ubuntu下解决高并发socket最大连接数限制,tcp默认1024个连接

    nux系统默认ulimit为1024个访问 用户最多可开启的程序数目 一般一个端口 xff08 即一个进程 xff09 的最高连接为2的16次方65536 通过这个命令 ulimit n 可以看到默认值为1024 查看全局文件句柄数限制 系
  • Linux下实现Post方式

    首先了解HTTP协议各字段的含义 xff0c 以下是部分较好的归纳 xff1a HTTP一个HTTP请求报文由请求行 xff08 request line xff09 请求头部 xff08 header xff09 空行和请求数据4个部分组
  • vins中的坐标系变换及g2r函数

    slam中经常会需要表示一个刚体的位姿 例如imu的位姿 xff0c 相机的位姿 首先我们需要在一个刚体上架上一个坐标系 这个坐标系为本体坐标系 怎么架一个坐标系 xff1f imu本身就有规定其本身的x y z轴的方向 相机一般认为 xf
  • yolo_v3安装试运行小记

    github源代码 xff1a https github com qqwweee keras yolo3 Cuda下载地址 xff1a https developer nvidia com cuda toolkit archive Cudn
  • pytorch安装使用

    pytorch官网 xff1a https pytorch org get started locally conda添加清华源 xff1a conda config add channels https mirrors tuna tsin
  • ORB_SLAM3初试

    源码地址 xff1a orb salm3 github 论文地址 orb slam3 paper ORB SLAM3提供了单目 xff0c 双目 xff0c rgbd 以及各自结合IMU的数据分析实现 demo运行效果展示 xff1a 在不
  • vins-fusion代码解读[五] imu在vins里的理解

    SLAM新手 xff0c 欢迎讨论 IMU作用 vins中 xff0c IMU只读取IMU六轴的信息 xff0c 3轴线加速度 xff08 加速度计 xff09 和3轴角速度 xff08 陀螺仪 xff09 通过对陀螺仪的一次积分 xff0
  • Gazebo仿真学习——2.为Gazebo中的机器人添加实用插件

    Gazebo plugins in ROS 1 要了解2 插件类型3 添加一个ModelPlugin4 添加一个SensorPlugin5 gazebo plugins中的所有可用插件5 1 Camera5 2 GPU Laser xff0
  • 一款直播电视接口分析

    一 初步了解 最近对一款网络电视app进行分析 xff0c 要求是找到其访问直播源的接口 xff0c 初次打开apk xff0c 先做一个简单的了解 xff0c 并没有加固等处理 xff0c 只是对代码做了混淆处理 我们目的是找到其访问直播
  • android串口通讯

    一 配置 1 下载文件 https github com cepr android serialport api 2 复制android serialport api文件夹至app src main java 3 复制jni文件至app s
  • boost库介绍以及使用

    C 43 43 boost库介绍以及使用 一 什么是boost库 boost 库是一个优秀的 xff0c 可移植的 xff0c 开源的 C 43 43 库 xff0c 它是由 C 43 43 标准委员会发起的 xff0c 其中一些内容已经成
  • 内存映射文件

    内存映射文件 本文给出了一种方便实用的解决大文件的读取 存储等处理的方法 xff0c 并结合相关程序代码对具体的实现过程进行了介绍 引言 文件操作是应用程序最为基本的功能之一 xff0c Win32 API和MFC均提供有支持文件处理的函数
  • 如何在Eclipse中使用Ruby开发工具(RDT)插件进行Ruby开发

    一 为什么使用Ruby xff1f 现在 xff0c 为什么众多的Java开发者都关注Ruby xff1f Ruby xff0c 是10年以前在日本创建的一种通用目的脚本语言 xff0c 这是一种纯面向对象的语言 不同于 Java技术 xf
  • Open eyes in your life

    读到几个故事 xff0c 希望和大家分享 一 成功无捷径 Be proactive 一个青年职员平时工作懒懒散散 xff0c 在转正前一个月他问老板 xff1a 如果我兢兢业业工作一个月 xff0c 我能转正吗 xff1f 老板答道 xff
  • Ruby菜鸟必读http://blog.csdn.net/leasun/archive/2004/06/16/9836.aspx

    作者 xff1a William Djaja Tjokroaminata 目录 资源 1 利用警告信息 2 交互式命令解释器 xff08 Interactive shell xff09 3 联机文档 4 Class method 5 从字符