puts 输出,\在ruby里是转义符号
2**(1/4) 指数运算:结果是0 #1与4的商为0,然后2的0次方为1
16**(1/4.0) 结果是2 #1与4.0的商为0.25(四分之一),然后开四次方根
#{ expr } 替换任意 Ruby 表达式的值为一个字符串 功能强大,可以无视内部符号,即使与外部符号冲突也不影响,如"#{a+",a"}"
\n | 换行符 (0x0a) |
\r | 回车符 (0x0d) |
\f | 换页符 (0x0c) |
\b | 退格键 (0x08) |
\a | 报警符 Bell (0x07) |
\e | 转义符 (0x1b) |
\s | 空格符 (0x20) |
\nnn | 八进制表示法 (n 是 0-7) |
\xnn | 十六进制表示法 (n 是 0-9、a-f 或 A-F) |
\cx, \C-x | Control-x |
\M-x | Meta-x (c | 0x80) |
\M-\C-x | Meta-Control-x |
\x | 字符 x |
遍历: object.each do | |
创建对象:class Customer end
Ruby 提供了四种类型的变量:
在 Ruby 中,您可以使用类的方法 new 创建对象
在 Ruby 中,函数被称为方法。类中的每个方法是以关键字 def 开始,后跟方法名。
方法名总是以小写字母开头。在 Ruby 中,您可以使用关键字 end 来结束一个方法。用end结束一个类。
变量是持有可被任何程序使用的任何数据的存储位置。
Ruby 支持五种类型的变量。
$
开头:全局变量(Global variable)。@
开头:实例变量(Instance variable)。@@
开头:类变量(Class variable)类变量被共享在整个继承链中MR_COUNT = 0 # 定义在主 Object 类上的常量
module Foo
MR_COUNT = 0 # 局部变量
::MR_COUNT = 1 # 设置全局计数为 1
MR_COUNT = 2 # 设置局部计数为 2
end
puts MR_COUNT # 这是全局常量 结果为1
puts Foo::MR_COUNT # 这是 "Foo" 的局部常量 结果为2
它们是特殊的变量,有着局部变量的外观,但行为却像常量。您不能给这些变量赋任何值。
<=> | 联合比较运算符。如果第一个操作数等于第二个操作数则返回 0,如果第一个操作数大于第二个操作数则返回 1,如果第一个操作数小于第二个操作数则返回 -1。 | (a <=> b) 返回 -1。 |
=== | 用于测试 case 语句的 when 子句内的相等。 | (1...10) === 5 返回 true。 |
.eql? | 如果接收器和参数具有相同的类型和相等的值,则返回 true。 (==只匹配值,低级判断,常用) | 1 == 1.0 返回 true,但是 1.eql?(1.0) 返回 false。 |
equal? | 如果接收器和参数具有相同的对象 id,(内存地址,最高层匹配)则返回 true。 | 如果 aObj 是 bObj 的副本,那么 aObj == bObj 返回 true,a.equal?bObj 返回 false,但是 a.equal?aObj 返回 true。 |
三元运算符: ? :
ruby之三元运算符比if更为强大简洁。案例
puts 1 < 2 ? "One is less than two!" : "One is not less than two."
三元运算符:journal_date = journal_issue ? journal_issue.year : nil
等价于
if !journal_issue.nil?
journal_date = journal_issue.yer
end
".." 和 "..." 的区别:前者不包含结束点,后者包含结束点
defined? object 假如object创建了 返回true,否则返回nil (未定义)
匿名函数:
proc{代码块 } 可以使用call方法调用函数,执行代码
unless conditional [then] code [else code ] end
unless式和 if式作用相反,即如果 conditional 为假,则执行 code。如果 conditional 为真,则执行 else 子句中指定的 code。
if conditional [then] code... [elsif conditional [then] code...]... [else code...] end
if 表达式用于条件执行。值 false 和 nil 为假,其他值都为真。请注意,Ruby 使用 elsif,不是使用 else if 和 elif。
如果 conditional 为真,则执行 code。如果 conditional 不为真,则执行 else 子句中指定的 code。
通常我们省略保留字 then 。若想在一行内写出完整的 if 式,则必须以 then 隔开条件式和程式区块
提示:if 0 在ruby 里是true
case expression [when expression [, expression ...] [then] code ]... [else code ] end
case先对一个 expression 进行匹配判断,然后根据匹配结果进行分支选择。
它使用 ===运算符比较 when 指定的 expression,若一致的话就执行 when 部分的内容。
通常我们省略保留字 then 。若想在一行内写出完整的 when 式,则必须以 then 隔开条件式和程式区块。
当case的"表达式"部分被省略时,将计算第一个when条件部分为真的表达式。
foo = false bar = true quu = false case when foo then puts 'foo is true' when bar then puts 'bar is true' when quu then puts 'quu is true' end # 显示 "bar is true"
while conditional [do] code end
或者
while conditional [:] code end
当 conditional 为真时,执行 code。
语法中 do 或 : 可以省略不写。但若要在一行内写出 while 式,则必须以 do 或 : 隔开条件式或程式区块。
code while condition 或者 begin code end while conditional
当 conditional 为真时,执行 code。
如果 while 修饰符跟在一个没有 rescue 或 ensure 子句的 begin 语句后面,code 会在 conditional 判断之前执行一次。
until conditional [do] code end
当 conditional 为假时,执行 code。
语法中 do 可以省略不写。
for variable [, variable ...] in expression [do] code end
先计算表达式得到一个对象,然后针对 expression 中的每个元素分别执行一次 code。
for...in 循环几乎是完全等价于:
(expression).each do |variable[, variable...]| code end
一般多用each do
break 退出循环,next 跳到下一次循环,
next
跳到循环的下一个迭代。如果在块内调用,则终止块的执行(yield 表达式返回 nil)。
redo
重新开始最内部循环的该次迭代,不检查循环条件。如果在块内调用,则重新开始 yield 或 call。
方法名应以小写字母开头。如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。
方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。
Ruby 中的每个方法默认都会返回一个值。这个返回的值是最后一个语句的值。
假如有return,如果给出超过两个的表达式,包含这些值的数组将是返回值。如果未给出表达式,nil 将是返回值
参数:
*test 不定长参数,test.leng 变量长度/参数长度
当方法定义在类的外部,方法默认标记为 private。另一方面,如果方法定义在类中的,则默认标记为 public。
alias foo bar alias $MATCH $&
在这里,我们已经为 bar 定义了别名为 foo,为 $& 定义了别名为 $MATCH。
这个语句用于为方法或全局变量起别名。别名不能在方法主体内定义。即使方法被重写,方法的别名也保持方法的当前定义。
这个语句用于取消方法定义。undef 不能出现在方法主体内。
您可以在类中嵌入模块。为了在类中嵌入模块,您可以在类中使用 include 语句
uby 不直接支持多重继承,但是 Ruby 的模块(Module)有另一个神奇的功能。它几乎消除了多重继承的需要,提供了一种名为 mixin 的装置。
Ruby 没有真正实现多重继承机制,而是采用成为mixin技术作为替代品。将模块include到类定义中,模块中的方法就mix进了类中。
https://www.cnblogs.com/wangbaobao/p/7239597.html ubuntu安装ruby的url