1、强类型,即不会自动进行类型转换,而C/C++为弱类型。

# Ruby
i = 1
puts "Value is " + i # TypeError: can't convert Fixnum into String
# from (irb):2:in `+'
# from (irb):2
2、完全地OO(Object-Oriented面向对象),所有方法都是对对象,无全局函数。
strlen(“test”)   # error
“test”.length
3、变量:以小写开头。 my_composer = ‘Beethoven’
4、类型转换: puts 2.to_s + ‘5’ #25
5、常量:以大写开头。 Foo = 1
6、空值nil。 
7、字符串符号symbols,相同符号不会重复创建对象。 puts :foobar.object_id
8、队列Array。 
a = [1, ‘cat’, 3.14 ] 
puts a.inspect # 输出 [1, ‘cat’, 3.14]
# inspect将对象转换成适合阅读的字符串
# 读取没有设定的元素,则值为nil
a = [‘Ruby’, ‘Python’]
a.each do |ele|
  puts ‘I love ’ + ele + ‘!’
end
# I love Ruby!
# I love Python!
9、Hash类似C++的map和python的Dict,使用Key-Value结构。通常使用Symbol当作Key:
config = { :foo => 123, :bar => 456 }
config = { for: 123, bar:456 } # 和上面等价,Ruby 1.9新语法
puts config[:foo]  #123
puts config[“nothing”]  #nil
10、else if写成elsif:
total = 26000

if total > 100000
puts "large account"
elsif total > 25000
puts "medium account"
else
puts "small account"
end
puts “greater than ten” if total > 10 # 适合执行的if语句只有一行的情况
11、Case结构,case when:
case name
when "John"
puts "Howdy John!"
when "Ryan"
puts "Whatz up Ryan!"
else
puts "Hi #{name}!"
end
12、while,until,loop,next,break和C++语法不同,不过很少用,实际用迭代器。
13、正则表达式:
# 找出手机号码
phone = "123-456-7890"
if phone =~ /(\d{3})-(\d{3})-(\d{4})/
ext = $1
city = $2
num = $3
end
14、?与!的惯用法:方法名称用?标识返回Boolean值,用!标识有副作用,如array.sort!
15、自定义类型:
class Person # 大写开头的常數
 puts “running when class loaded” # 载入该类型时执行,主要用来做Meta-programming
 @@sname = ‘Class var’# 类变量

def initialize(name) # 构建函数
@name = name # 对象变量
end def say(word)
puts "#{word}, #{@name}" # 字符串相加
end end p1 = Person.new("ihower")
p2 = Person.new("ihover")
16、类继承,使用<符号。
17、Module和Class类似,但是不能用new来创建,其用途一是可以当作Namespace,更重要的功能是Mixins,将一个Module混入类型中,这样这个类型就拥有了此Module的方法,多重继承的问题也通过Module来解决。

首先是debug.rb

module Debug
def who_am_i?
puts "#{self.class.name}: #{self.inspect}"
end
end

然后是foobar.rb

require "./debug"
class Foo
include Debug # 这个动作叫做 Mixin
end class Bar
include Debug
end f = Foo.new
b = Bar.new
f.who_am_i? # 输出 Foo: #<Foo:0x00000102829170>
b.who_am_i? # 输出 Bar: #<Bar:0x00000102825b88>
18、异常处理,使用rescue、ensure:
begin
puts 10 / 0 # 这会抛出 ZeroDivisionError 的异常
rescue => e
puts e.class # 如果发生异常会执行 rescue 这一段
ensure
# 无论有沒有发生异常,ensure 这一段都一定会执行
end
# 输出 ZeroDivisionError
其它高阶功能如Meta-programming暂不考虑。
参考转载文档:https://ihower.tw/rails4/

ruby注意点的更多相关文章

  1. 安装cocoapods遇到两大坑-Ruby版本升级和Podfile的配置

    今天安装cocoapods #移除原有ruby源 $ gem sources --remove https://rubygems.org/ #使用可用的淘宝网 $ gem sources -a htt ...

  2. Unable to download data from http://ruby.taobao.org/ & don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

    安装cocoapods,记录两个问题! 1.镜像已经替换成了 http://ruby.taobao.org/, 还是不能不能安装cocoapods, 报错:Unable to download dat ...

  3. 安装了ruby后怎么安装sass

    在命令行中输入 ruby -v 查看版本号 先移除默认的https://rubygems.org源,命令为gem sources --remove https://rubygems.org/,按回车 ...

  4. ruby 基础知识(一)

    突然今天发现一大神的博客:http://www.cnblogs.com/jackluo/archive/2013/01/22/2871655.html    相信初学者会受益颇多 ruby  参考文档 ...

  5. ruby 基础知识(二)

    ruby  中的动态方法 http://singleant.iteye.com/blog/1680382 Rails 大量使用了符号(symbol).符号看上去很像变量名,不过以冒号作为前缀.符号的例 ...

  6. Ruby安装Scss

    Ruby安装Scss 引言 已经许久不写HTML了,今天有点以前的东西要改.但是刚装的Windows10,已经没有以前的Web开发环境了.只好重新安装. 结果Webstorm装好后配置Scss出现错误 ...

  7. fzf by ruby

    fzf by ruby */--> fzf by ruby 1 github地址 https://github.com/junegunn/fzf 2 简介 软件通过匿名管道和grep扩展了bas ...

  8. The Safe Navigation Operator (&.) in Ruby

    The most interesting addition to Ruby 2.3.0 is the Safe Navigation Operator(&.). A similar opera ...

  9. Ruby on Rails 创建https应用

    1. 创建证书请求文件条件:私钥+证书签名请求+opensslyum install -y opensslmkdir /root/ssl/ && cd /root/ssl/openss ...

  10. Ruby数组

    Ruby数组是有序的,任何对象的整数索引的集合.每个数组中的元素相关联,并提取到的一个索引.下标与C或Java相似,从0开始.负数索引假设数组末尾,也就是说-1表示最后一个元素的数组索引,-2是数组中 ...

随机推荐

  1. 流式布局&固定宽度&响应式&rem

    我们现在在切页面布局的使用常用的单位是px,这是一个绝对单位,web app的屏幕适配有很多中做法,例如:流式布局.限死宽度,还有就是通过响应式来做,但是这些方案都不是最佳的解决方法. 1.流式布局: ...

  2. Oracle登录操作系统验证和密码文件验证

    1.确认数据库版本 2.查看当前配置文件 ORALCE数据库不同的登录验证方式是和SQLNET.ORA配置文件有关系的,在配置文件中有一个参数sqlnet.authentication_service ...

  3. 模拟状态为inactive的日志损坏的恢复实验(完全恢复)

    1查看当前日志状态 从这里可以看到我们现在有三组日志,每组日志中只有1个成员.为了演示这个实验,我们为每个组增加1个成员. 2为每组增加组成员 添加后我们验证一下目前各日志成员的状态: 从上面的视图中 ...

  4. @property语句

    @property声明的形式是: @property ( attributes ) type name; type和name的含义一目了然,attributes描述了如何编写访问器. 一.assign ...

  5. requirejs解决异步模块加载方案

    他首先会遍历enableRegistry取出其中定义的模块,并且将没有加载成功的模块标识注入noLoads数组,如果过期了这里就会报错 如果上述没问题还会做循环依赖的判断,主要逻辑在breakCycl ...

  6. 【iCore3 双核心板】例程十四:FATFS实验——文件操作

    实验指导书及代码包下载: http://pan.baidu.com/s/1dEpechF iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  7. jdk安装配置具体分析

    JDK 选择安装目录 安装过程中会出现两次 安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的不同文件夹中.(不能都安装在java文件夹的根目录下,j ...

  8. LNMP环境简易安装流程

    1.关闭防火墙 [root@CentOS ~]# chkconfig iptables off 2.关闭selinux vi /etc/sysconfig/selinux //将SELINUX=enf ...

  9. c语言的输入输出函数

    参考文章: http://blog.sina.com.cn/s/blog_784f40b80100psg9.html C语言输入输出函数分为两类: 1.格式化输入输出函数 2.非格式化输入输出 --- ...

  10. android中自定义的dialog中的EditText无法弹出输入法解决方案

    1.解决无法弹出输入法: 在show()方法调用之前,用dialog.setView(new EditText(context))添加一个空的EditText,由于是自定义的AlertDialog,有 ...