参考 张开川的 ruby 语言入门教程
1. 等价语句
单引号里是什么就是什么,会照着输出。
ruby 代码
- a=5
- b="hhhh"
- print("a is ",a,"\n")
- puts("a is #{a}")
- puts('a is #{a}')
- 输出结果:
- a is 5
- a is 5
- a is #{a}
2.
ruby 代码
- #ruby支持缺省参数
- def sum(a,b=5)
- a+b
- end
- puts sum(3,6) #输出结果为:9
- puts sum(3)#输出结果为8
- #ruby支持可变参数
- def sum(*num)
- numSum = 0
- num.each{|i| numSum += i}
- return numSum
- end
- puts sum() #输出结果为0
- puts sum(3,6)#输出结果为9
- puts sum(1,2,3,4,5,6,7,8,9)#输出结果为45
- #ruby中如果一个类里有2个同名方法,总是后面的一个被执行
3. ruby中的实例变量,类变量,类方法
实例变量:每个实例独享,变量名用@开头
类变量:所有实例共享,变量名用@@开头,类似java里的static变量,但是在使用前必须要初始化。
类方法:不需要通过实例对象来调用。类方法定义方式: 类名.方法名,如:
ruby 代码
- def StudentClass.student_count
- puts "aaa"
- end
如果在外部调用一个类里的常量,需要用到域作用符号"::"
4.ruby里的单例方法:给具体的某个实例对象添加方法,这个方法只属于这个实例对象的。这样的方法叫单例方法
定义单例方法,首先要生成一个实例对象,其次要在方法名前加上一个对象名和一个点号(.)
如:
ruby 代码
- class Person
- def talk
- puts "hi!"
- end
- end
- p1 = Person.new
- p2 = Person.new
- def p2.talk #定义单例方法p2.talk
- puts "Here is p2."
- end
- def p2.laugh
- puts "ha,ha,ha..."
- end
- p1.talk
- p2.talk
- p2.laugh
- 输出结果为:
- hi!
- Here is p2.
- ha,ha,ha...
5.访问控制
ruby 代码
- #访问控制
- #public , protected, private
- #public 方法,可以被定义它的类和其子类访问,可以被类和其子类的实例对象调用
- #protected 方法,可以被定义它的类和其子类访问,不能被类和其子类的实例对象调用,但是 可以在类和其子类中制定给实例对象
- #private 方法,可以被定义它的类和其子类访问,不能被类和其子类的实例对象调用,私有方法不能指定对象
- class Person
- public
- def talk
- puts "public:talk"
- end
- def speak
- "protected:speak"
- end
- def laugh
- "private:laugh"
- end
- protected :speak
- private :laugh
- def useLaughTest(another)
- puts another.laugh #这里错误,私有方法不能指定对象
- end
- def useSpeakTest(another)
- puts another.speak #这里可以,,protected方法可以指定对象
- end
- end
- class Student < Person
- def useLaugh
- puts laugh
- end
- def useSpeak
- puts speak
- end
- end
- p1 = Person.new
- p1.talk
- #p1.speak 实例对象不能访问protected方法
- #p1.laugh 实例对象不能访问private方法
- p2 = Student.new
- p2.useLaugh
- p2.useSpeak
输出结果为:
public:talk
private:laugh
protected:speak