Ruby - 利用 ARGV 特性執行指定的方法

情境

我想手動執行 class 的某個方法。這邊的例子是當我想移動的時候,我可以選擇走路、跑步或是游泳。

方法一: 在 irb 中引入 Ruby 檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Move

def self.walking
puts "walking"
end

def self.running
puts "running"
end

def self.swimming
puts "swimming"
end
end

打開 irb ,輸入 require_relative argv_ex1.rb,argv_ex1.rb 是上面程式碼的檔名。

1
2
3
4
5
[1] pry(main)> require_relative 'argv_ex1.rb'
=> true
[2] pry(main)> Move.swimming
swimming
=> nil

用這樣的方式我們可以執行 Class 中的某個方法,不過還是麻煩了點。現在我們來試試透過 ARGV 來執行 Move 中的方法。

方法二:使用 ARGV 執行指定的 method

2.1 簡單介紹 ARGV

當你在 Command line 模式中輸入除了原本檔名以外的參數,會自動被儲存成一個 ARGV 陣列。

1
2
3
4
5
argv = ARGV

puts "ARGV Type is: " + argv.class.to_s
puts "array elements are: "
puts argv

打開 Terminal 輸入ruby argv_ex1.rb cat dog rabbit snake,會得到:

1
2
3
4
5
6
ARGV Type is:Array
array elements are:
cat
dog
rabbit
snake

簡單的說參數的第一個會對應 ARGV[0],第二個會對應 ARGV[1],運用這個特性我們可以依照需求來決定要執行的方法或內容。

2.2 應用到例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class TryARGV
def self.execute( command )
if command.to_sym == :walk
self.walking
elsif command.to_sym == :swim
self.swimming
else
puts "swim or walk?"
end
end

def self.walking
puts "walking"
end

def self.running
puts "running"
end

def self.swimming
puts "swimming"
end
end

TryARGV.execute( ARGV[0] )

現在我們只要在 terminal 中輸入 swim 或是 walk 即會呼叫對應的方法。

1
2
3
4
$ argv_practice ruby argv.rb swim
swimming
$ argv_practice ruby argv.rb walk
walking

結論

可以用來呼叫類別方法的還有 rake 也可以達到相同效果。不過如果要使用的話還需要另外設定 .rake 檔。ARGV 的方式在輕量使用的時候是個不錯的選擇。

評論