Ruby是一门动态的、强类型的、纯面向对象的编程语言。它和Python非常相似,但比Python面向对象更加彻底、使用更加灵活、语法更加复杂、也更为有趣。

抛开做事情到底应该有多少种方法这个问题,我相信不止我一个人是为了学习Rails才学习Ruby。每当我拿起Django、Flask或者Python的时候,就会听到有人在说Ruby on Rails。

于是我决定今天开始学习Rails。第一天先来简单学习一下Ruby。

数据类型

首先,因为Ruby的纯面向对象的特征,不存在Java中的“原始数据类型”这种说法。Ruby中内置的几种数据类型也是对象,和其他的对象并无差别。

  • 数值Numeric

    包括整数Int和浮点Float

  • 字符串String

    • Ruby中的字符串也有单引号、双引号、三引号这三种包裹的方式。
    • Ruby中不存在字符类型。只有长度为1的字符串。
    • 求字符串长度?str.length而不是len(str)
    • 比较字符串的方法和Java近乎相反。==比较字符串的值,而equal?比较对象是否相同。
  • 符号Symbol

    变量、方法、类都可以表示成符号。如::method:variable

  • 布尔Boolean

    取值为truefalse。与Python不同的是,只有falsenil才为假,其余均为真,包括0''[]等。

  • 数组Array

    [1, 'apple', false]

  • 字典Hash

    ['Jan'=>1, 'Feb'=>2, ...]

类型之间的转换也是面向对象的风格,如str.to_i,而不是int(str)。当然to_fto_s之类的也是有的。

奇怪的符号

以前我一直觉得Objective-C差不多把键盘上的符号都用光了。现在我才知道,和Ruby相比算是小巫见大巫了。

  • $var:表示全局变量。如$stdin

  • @var:表示实例变量。

  • @@var:表示类变量。

  • :var:表示符号变量。

  • #{var}:表示在字符串中的占位。如:

    name = "world"
    puts "Hello, #{name}!"
  • %var:用于格式化字符串。与Python用法类似。上面的例子可以改写为:

    puts "Hello, %s" % name

除此之外,还有一个更奇怪的,虽然没用什么符号,但在Ruby中,首字母大写表示常量。

输入输出

Ruby中putsprint常用来输出。

puts在输出后会自动换行,而print不会。

在输出字符串时也可以拼接:

a = "Hello, "
b = "World!"
puts a + b

在Python通常使用逗号,但Ruby中逗号会产生换行。

使用gets获取用户输入,chomp用来去除多余的空行。例:

print "What's your name? "
name = gets.chomp
print "How old are you? "
age = gets.chomp.to_i

读写文件的操作与Python大同小异。常用的方法有openreadwriteclose等。

判断、循环和选择

判断语句有ifunlessif not)。

Ruby中有三元运算符x ? y : z,不需要用别扭的y if x else z

循环语句有whileuntilwhile not)和loopwhile true)。

还有传统的for循环:for x in list

Ruby风格的写法:list.each do |x|

另一种写法:list.each {|x| ...}

控制循环的关键字有:

  • break
  • next (相当于continue)
  • redo 重做该次循环
  • retry 重做循环

我不知道最后这俩有什么用?

选择语句的例子:

case a
when 1..5
puts "It's between 1 and 5"
when 6
puts "It's 6"
when String
puts "You passed a string"
else
puts "You gave me #{a} -- I have no idea what to do with that."
end

[Rails学习之路]初识Ruby(一)的更多相关文章

  1. [Rails学习之路]初识Ruby(二)

    继续上次Ruby的学习.接下来就到了Ruby的方法. Ruby的方法与Python仍然很像.使用def定义,可以使用undef取消定义. 在Ruby中,经常可以看见方法后面跟有"?" ...

  2. 开始了大概三四天的Rails学习之路

    最近因为一位极光推送朋友,我开始了大概三四天的Rails学习之路,最终达到的水平是可以比较轻松地做出大部分功能,然后自我感觉可以自如地按照Rails的设计思想去思考.由于编程的日益流行,我结识了越来越 ...

  3. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  4. [Rails学习之路]Rails文件结构与路由

    约定优于配置和RESTful是Ruby on Rails十分推崇的哲学.在一个默认的RESTful的Rails项目中,使用资源和HTTP动词来帮助组织项目. 假如有一个使用scaffold创建的Rai ...

  5. [Rails学习之路]Rails路由配置

    如果是使用Rails的默认约定,那么几乎是零配置. 但有些时候,我们可能不得不(或者更喜欢)进行一些特殊的配置. 其实Rails在路由功能中也有很丰富的配置选项. routes.rb文件中靠前的规则优 ...

  6. Python学习之路——初识Python

    一.第一个程序Hello World: 1.打印输出Hello World: Python2打印方法: >>> print "hello world"hello ...

  7. python学习之路 初识xml

    import requests from xml.etree import ElementTree as ET r = requests.get('http://www.webxml.com.cn// ...

  8. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  9. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

随机推荐

  1. [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树

    树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...

  2. python大战机器学习——数据预处理

    数据预处理的常用流程: 1)去除唯一属性 2)处理缺失值 3)属性编码 4)数据标准化.正则化 5)特征选择 6)主成分分析 1.去除唯一属性 如id属性,是唯一属性,直接去除就好 2.处理缺失值 ( ...

  3. windows下运行jar

    run.bat 1. javaw运行 @echo offstart javaw -Xmx128m -Xms64m -jar testlog.jarexit 2.java运行 @echo offjava ...

  4. 转 基于MySQL MEB的备份恢复

    几种备份方式的介绍 mysqlbackup是一个热备份工具.也就是说它不像mysqldump那样给表上一个全局锁,由于mysqldump上了这个锁,所以就造成客户端只能对 数据库进行读操作不能写,这也 ...

  5. linux目录权限

    linux中,有三种不同类型的用户可以对文件或目录进行访问:文件所有者,同组用户,其他用户.所有者一般是文件的创建者,文件所有者自动拥有对该文件的读.写和可执行权限.所有者能允许同组用户有权访问文件, ...

  6. UVALive - 4223(hdu 2926)

    ---恢复内容开始--- 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS ...

  7. Java面向对象_单例设计模式

    单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 两种实现方式:饿汉式和懒汉式 何种情况下使用呢?当 ...

  8. Python 为threading.Thread添加 terminate

    import threading import inspect import ctypes def _async_raise(tid, exc_type): """rai ...

  9. sql server数据类型char和nchar,varchar和nvarchar,text和ntext

    varchar和nvarchar的区别: varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字节 ...

  10. java与模式读后总结

    一 老规则边看边写书上的代码,磨磨蹭蹭三个多星期终于把一本1000+的java与模式看完了. 于是,在这里贴上自己对每个模式的思考和总结,其实这个东西在我边看边写的时候已经写了一大半,博文再写一次算是 ...