print()
puts()
p
-Ks, -Ku
ruby 能够正常的计算算数表达式,8+4/2 = 10 而不是 6
注释
# 行首,行中
=begin和=end之间的都会视为注释
没有行中的注释,注释掉一行中间的某些东西
控制
if - then - end # then 可以省略
if - then - else - end
if - then - elsif - end
循环
while - do - end #do 可以省略
times # Ruby的一个特点
是一个方法,{}中放将要被重复执行的代码
def - method body - end
require "fileName"
ruby库中的文件可以直接引用
其它的需要指明路径,如"./fileName"
Array
names = ["赵", "钱", "孙", "李"] #逗号分隔,中括号
获取元素时,也是用[]中括号。如names[0],值为"赵"
数组的大小可以任意改变。(变小?不清楚)
数组元素的类型可以变换
数组的大小可以用.size获得
each语法:
array.each{|name| #do something on name}
Hash
some_hash = {"key1"=>value1, "key2"=>value2,...}
获取元素: some_hash["some_key"]
hash 元素没有固定的顺序,所以只能通过key来获取其值
each语法:
hash.each{|key, value| #do something on key and value}
重定向 >
ruby some_file.rb > somefile.suffix
if 的判断条件除了false,nil之外所有的东西都认为是true
ARGV[]数组,是用来保存传递进来的参数的数组
ARGV[0]指代传递给ruby程序的第一个参数,ARGV[1]指代传递给ruby程序的第二个参数,
字符串转换成数字——to_i
文件读取
读取整个文件
file = open(filename)text = file.read#do somthingfile.close
一点点的读
file = open(filename)while text = file.gets do #do somethingendfile.close
变量
局部变量 : 以小写字母或_开头的变量
全局变量 : 以$开头的变量(建议少使用)
实例变量 : 以@开头的变量
类变量 : 以@@开头的变量
虚拟变量 : true, false, self等
常数:必须以大写字母开始(貌似是全部大写)
变量,方法命名:单词1_单词2_单词3
变量是否指向同一个对象,判断用equals?。
name = "testName"
name2 = name
name.equals?(name2) # true
对象值是否相等用,==
str = "foo"
str2 = "f" + "o" + "o"
str == str2 #true
== 和 eql?很像,除了在数字的比较上。
1 == 1.0 #true
1.eql?1.0 #false 注意写法
字符串是否为空的判断:str.empty?
当让一个方法的返回结果为真假值的时候,这个方法的命名最好后面加上一个?。这是Ruby的规则。
&&, ||, !
and, or, not
意义相同,优先级不同。下面的优先级低。
unless与if条件相反
只有怎样的时候,才执行。
case when# when后面可以写上很多值
case some_varwhen "value1", "value2" then #do somethingwhen "value3", "value4" then #do somethingelse #do somthingend
when 还可以接收Numeric, String这种类型,用来判断some_var是不是该类型
print "a > b" if a > bif a > b then print "a > b"end
以上两端的意义是相同的。。。
===
当左边的值是数值或字符串,与==意义相同;
当左边是类,则判断是否属于该类;
当左边是正则表达式时,获取值所在的位置;
times:以下两种形式相同,从使用方法上来看,貌似是一种方法
number.times{ |i| #可选 #do something}number.times do |i| #可选 #do somethingend
times中可以追加|i|,这个i保存当前循环次数,但是不建议使用
for,其中没有|key|等,没有{}的写法
for i in begin_num .. end_num do #do somethingend
# 遍历some_container中的对象 for i in some_contain do #do somethingend
没有++,只有 m += 1
each,方法,接受||变量,如hash中的|key, value, other| #这里的other不会出错,但是没有值
something.each do |some| #do somethingend
something.each {|some| #do something}
until,跟unless挺像,只有满足条件了,才跳出循环
break: 跟JAVA一样
next:跟java的continue一样
redo:循环体上的游标不会向下执行,而是停留在原处。。。
方法的分类
实例方法:类的实例调用的方法
类方法:类名调用的方法,可以用.也可以用::。如Array.new,Array::new
这是一种不区分类型对象的方法,只要是这个类的对象,执行结果都是一样的。
函数型方法:没有方法接受者的方法,如sin(24), print 10等等
这是一种不会区分类型,对象的方法,也就是说任何类,任何对象调用这个方法都会实现相同的效果。
方法定义:
def method_name(param1, param2...) #do somethingend
注意:没有{},没有do,()要紧跟着方法名称
给方法设定预定值:
def method_name(param1 = "Voctrals") #do somethingend
这种情况下,如果没有给方法传递参数,那么Voctrals就作为参数传递给method_name。
如果有多个参数,那么预定值只能从右侧开始。。。因为方法的调用没有参数占位符!!!
方法的返回值:
1 用return返回结果
2 用return跳出方法体
3 如果没有return的话,方法的最后代码的返回值为结果返回给方法的调用者
4 如果方法没有返回值,那么方法的返回值为nil
类
创建一个类的新的对象,必须使用new关键字,如Array.new。
class方法,这个方法可以用来检查一个对象所属的类,如:"test".class。
instance_of?方法用来检查一个对象是不是参数指定类型的一个实例,如"string".instance_of? Array 返回值为true。"string".instance_of? Object 返回值为false。
调用方法需要使用.,但是括号可以省略。。。
Object类,所有类的父类,它定义了好多方法
is_a?用来判断一个对象是不是参数指定的类型。如"string".instance_of? Array 返回值为true。"string".instance_of? Object 返回值为true。