ruby语言入门
```html 第一次写 Ruby 的入门人,十有八九会在终端里敲下 变量在 Ruby 里不需要声明类型。入门你写 方法定义也透着随意。 块(block)是 Ruby 最特别的东西。你写 字符串处理是 Ruby 的强项。双引号字符串里可以插变量: 数组和哈希(Hash)是日常用得最多的两个容器。数组用 异常处理用 学 Ruby 不用一上来就啃元编程、反射这些高级话题。先把变量、方法、块、数组哈希、字符串这几样玩熟,就能写出很实用的脚本了。装个 Ruby 环境,打开 irb(交互式解释器),一行行试。错了就错了,irb 不会炸,改一下再跑。这种即时反馈的学习方式,比看半天书再动手快得多。我当初就是靠 irb 把 puts "Hello,入门 World",然后盯着那行输出愣一下——就这么简单?入门没有 public static void main,没有 import,入门连分号都省了。入门松本行弘设计这门语言时,入门脑子里想的入门不是让机器跑得快,而是入门让人写得舒服。这种“舒服”贯穿了 Ruby 的入门每一处细节,也是入门它最值得学的地方。age = 25,入门它就自动认了整数;下一行改成 age = "二十五",入门它也不吭声。入门这种动态特性让写代码像说话,入门但代价是拼错变量名时不会报错,只会默默给你一个 nil。我刚开始用 Ruby 时,一个 user_name 写成 username,调试了半小时才发现。后来学乖了,小项目里用动态类型的爽快感,确实能盖过这点麻烦。def greet(name) 后面直接跟方法体,最后一行自动作为返回值,连 return 都省了。你要是习惯 Java 那种每个方法都写 return 的写法,刚开始会觉得少了点什么。但写多了就回不去了——代码短了,读起来反而更清楚。Ruby 里有个约定:方法名末尾带问号表示返回布尔值,比如 empty?;带感叹号表示会修改对象本身,比如 sort!。这种符号化的命名不是语法强制,但社区里大家都这么用,不遵守反而显得奇怪。[1, 2, 3].each { |n| puts n },花括号里的代码就是一个块。它像参数一样传给方法,但又不是普通参数。第一次见这种写法会懵:这到底算函数调用还是控制结构?其实都是。Ruby 把循环、迭代这些操作全做成了方法加块的形式。times、map、select 这些方法,配上块,写起来比 for 循环顺手得多。我见过有人用 Ruby 写了一个下午的脚本,全程没碰过 for 和 while,代码照样跑得欢。"你好,# { name}",不用加号拼来拼去。单引号字符串不解析转义和插值,性能稍微好一点,但差别小到可以忽略。真正方便的是那些字符串方法:split、strip、gsub、start_with?,名字起得直白,用起来不用查文档。写脚本处理文本时,这点特别省心。[] 创建,哈希用 { },取值都用 []。哈希的键可以是符号(symbol),写成 :name,比字符串当键省内存,也是 Rails 里的标准做法。Ruby 2.7 之后还支持了 hash[:key] 的简写,虽然只是语法糖,但写多了确实少敲键盘。有个坑要注意:哈希的默认值是 nil,但你可以创建时指定默认值,比如 Hash.new(0),这样访问不存在的键会返回 0 而不是 nil。这个特性在计数场景里特别有用。begin...rescue...end,跟其他语言的 try-catch 差不多,但 rescue 可以带类名,也可以不带。不带的时候默认捕获 StandardError,但不会捕获 SyntaxError 这种更底层的错误。我见过有人写 rescue 不指定异常类型,结果把内存不足的错误也吞了,程序莫名其妙继续跑。所以最好明确写 rescue => e,至少把异常对象存下来,方便打印日志。map 和 each 的区别试明白的——试了十几次,终于记住 map 返回新数组,each 返回原数组。这种笨办法,有时候比看文档管用。