閱讀40 返回首頁    go 阿裏雲 go 技術社區[雲棲]


ruby便捷進門

係統環境  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


最後更新:2017-04-03 14:53:52

  上一篇:go MyEclipse/Eclipse的內存優化與內存不足的解決辦法
  下一篇:go Spark-0.8新增Fair Scheduler資源調度