系统环境 rhel 6.4
默认安装 ruby 环境
本文参考资料来自网络!
1 交互式进入
终端操作:
--------------------------------------------------------------------------------------------------
[embedded@embedded ~]$ irb
irb(main):001:0> exit
[embedded@embedded ~]$
--------------------------------------------------------------------------------------------------
键入 irb 可以键入 ruby 交互式模式
输入 exit quit ctrl+d可退出该模式
说明一下:
python 交互模式的退出是键入 exit()
--------------------------------------------------------------------------------------------------
[embedded@embedded ~]$ python
Python 2.6.6 (r266:84292, Oct 12 2012, 14:36:13)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
[embedded@embedded ~]$
--------------------------------------------------------------------------------------------------
Python 进入是直接键入 python,ruby 直接键入 ruby是进入一个只有输入没有输出的界面,CTRL+C可退出该模式
2 玩玩先
免费的计算器
终端操作:
--------------------------------------------------------------------------------------------------
[embedded@embedded ~]$ irb
irb(main):001:0> 1+2
=> 3
irb(main):002:0> 1-2
=> -1
irb(main):003:0> 1*4
=> 4
irb(main):004:0> 1/3
=> 0
irb(main):005:0> 2/1
=> 2
irb(main):006:0> 2**3
=> 8
irb(main):007:0> Math.sqrt(4)
=> 2.0
irb(main):008:0> Math.sqrt(5)
=> 2.23606797749979
irb(main):009:0> exit
[embedded@embedded ~]$
--------------------------------------------------------------------------------------------------
直接可以操作运算,支持:
"+" "-" "*" "/" "**"乘方 "Math.sqrt(x)"开方
说明,注意开方的函数表达式为 Math.sqrt(x),其中 x 为要开方的数
--------------------------------------------------------------------------------------------------
irb(main):001:0> puts "hello kitty"
hello kitty
=> nil
irb(main):002:0>
--------------------------------------------------------------------------------------------------
说明
python 中用的是 print,python2 的语法和 ruby 一样,python3的话用的是 print ("output xxx")
puts 总是返回 nil,nil 是 ruby 中表示 “决定无值”--(absolutely-positively-nothing value)的方式
3 模块XX角色
RUBY 中,模块提供了两种角色
a 将相同性质的方法聚集在同一“类”下面
b 一个圆点(dot),其标记了消息的接收者
4 定义方法
终端操作
--------------------------------------------------------------------------------------------------
[embedded@embedded ~]$ irb
irb(main):001:0> def outputinfo
irb(main):002:1> puts "today is yesterday's son"
irb(main):003:1> end
=> nil
irb(main):004:0> outputinfo
today is yesterday's son
=> nil
irb(main):005:0>
--------------------------------------------------------------------------------------------------
说明
def 表示要定义一个其后名声明的方法
end 表示完成了该方法的定义
=> nil 表示 ruby 已经知道了该方法的定义
--------------------------------------------------------------------------------------------------
irb(main):005:0> def outputinfo(name)
irb(main):006:1> puts "today is yesterday's son #{name}"
irb(main):007:1> end
=> nil
irb(main):008:0> outputinfo("yes")
today is yesterday's son yes
=> nil
irb(main):009:0>
--------------------------------------------------------------------------------------------------
irb(main):009:0> def outputinfo(name = "yes")
irb(main):010:1> puts "today is yesterday's son #{name}"
irb(main):011:1> end
=> nil
irb(main):012:0> outputinfo "no"
today is yesterday's son no
=> nil
irb(main):013:0> outputinfo
today is yesterday's son yes
=> nil
irb(main):014:0>
--------------------------------------------------------------------------------------------------
说明
#{name} 表示在某一字符串中插入其它字符串,在大括号里面的字符串将被代替
若括号里面指定了相应字符串,则表示 默认;输出显示的时候若制定,则输出相应,否则,输出默认
--------------------------------------------------------------------------------------------------
irb(main):017:0> def a(name = "sunk")
irb(main):018:1> puts "hello #{name.capitalize}"
irb(main):019:1> end
=> nil
irb(main):020:0> a
hello Sunk
=> nil
irb(main):021:0>
--------------------------------------------------------------------------------------------------
capitalize方法为将名字的第一个字符大写,这点和 python 差不多
5 玩玩 类
终端操作
创建类 Greeter
--------------------------------------------------------------------------------------------------
[embedded@embedded ~]$ irb
irb(main):001:0> class Greeter
irb(main):002:1> def initialize(name = "World")
irb(main):003:2> @name = name
irb(main):004:2> end
irb(main):005:1> def say_hi
irb(main):006:2> puts "Hi #{@name}"
irb(main):007:2> end
irb(main):008:1> def say_bye
irb(main):009:2> puts "Hi #{@name}"
irb(main):010:2> end
irb(main):011:1> end
=> nil
irb(main):012:0>
--------------------------------------------------------------------------------------------------
说明
@name = name 为类的实例变量,对类中所有的方法-say_hi say_bye 都有效果的!
创建类 Greeter 的实例对象
--------------------------------------------------------------------------------------------------
irb(main):012:0> g = Greeter.new("kang")
=> #<Greeter:0xb774b1cc @name="kang">
irb(main):013:0> g.say_hi
Hi kang
=> nil
irb(main):014:0> g.say_bye
Hi kang
=> nil
irb(main):015:0>
--------------------------------------------------------------------------------------------------
注意,实例对象不能直接访问 name
--------------------------------------------------------------------------------------------------
irb(main):015:0> g.@name
SyntaxError: compile error
(irb):15: syntax error, unexpected tIVAR
from (irb):15
from :0
irb(main):016:0>
--------------------------------------------------------------------------------------------------
再玩一下
--------------------------------------------------------------------------------------------------
irb(main):016:0> Greeter.instance_methods
=> ["inspect", "tap", "clone", "public_methods", "__send__", "object_id", "instance_variable_defined?", "equal?", "freeze", "extend", "send", "methods", "hash", "dup", "to_enum", "instance_variables", "eql?", "instance_eval", "id", "say_hi", "singleton_methods", "taint", "enum_for", "frozen?", "instance_variable_get", "instance_of?", "display", "to_a", "method", "type", "say_bye", "instance_exec", "protected_methods", "==", "===", "instance_variable_set", "kind_of?", "respond_to?", "to_s", "class", "__id__", "tainted?", "=~", "private_methods", "untaint", "nil?", "is_a?"]
irb(main):017:0> Greeter.instance_methods(false)
=> ["say_hi", "say_bye"]
irb(main):018:0> g.respond_to?("name")
=> false
irb(main):019:0> g.respond_to?("say_hi")
=> true
irb(main):020:0> g.respond_to?("to_s")
=> true
irb(main):021:0>
--------------------------------------------------------------------------------------------------
说明
instance_methods 方法显示当前类的所有方法,包括其父类中定义的方法
以上红色部分为显示当前类中所定义的方法
方法 to_s 是将对象转换为字符串,是任何对象都会有的默认方法
修改类定义
在 RUBY 中,可以多次打开类并且修改之,需要用到的方法为:
attr_accessor
修改之后将应用于在此之后所建立的任何对象包括现存的该类的对象中,其实就是个数据各地儿都更新了,实时而已
通过使用attr_accessor定义了两个方法:
“.name”用来获取name属性值;
“.name=”用来设置namee属性值。
以上操作只能交互单一对象,如多对象,还得用其脚本 .rb