Ruby / Rails 有這個方法嗎? 這是什麼類別?

開始跑專案以後,我才學會的事

中場休息
Dec 28, 2020

之前的自我練習真的太少了,那就來補吧。
這篇可能沒有跟Meta Programming沾到邊。

一開始學Ruby,可能會問:「啊你怎麼知道有這方法可以用?」
除了「你不會知道你不知道的事」之外的回答,就是「看文件」。

那Rails呢? 「看文件Guide

找飯店? 「Trivago」

查詢 這個方法 寫在哪

言歸正傳。
學到後面Ruby的指令越用越少了,因為一直在碰Rails。
再者,可能是它們寫起來很像人話,所以有時候想到一個方法,不知道能不能用,除了看Doc,還有別的方式。
查詢方法寫在哪,我們先在Rails console試,在這裡面可用Ruby和Rails的指令。
例如要找 blank? 這個方法,可以看它寫在哪,範例如下:

2.7.0 :007 > "a".method(:blank?).source_location
=> ["/Users/apple/.rvm/gems/ruby-2.7.0/gems/activesupport-6.0.3.4/lib/active_support/core_ext/object/blank.rb", 121]

發現是寫在 active_support ,一看到這些「Active XXXX」,很明顯地這個方法是寫在Rails。
接著我們試著在irb查,這裡面只能用Ruby:

2.7.0 :003 > "a".blank?
Traceback (most recent call last):
5: from /Users/apple/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `<main>'
4: from /Users/apple/.rvm/rubies/ruby-2.7.0/bin/irb:23:in `load'
3: from /Users/apple/.rvm/rubies/ruby-2.7.0/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>'
2: from (irb):2
1: from (irb):3:in `rescue in irb_binding'
NoMethodError (undefined method `blank?' for "a":String)

嗯…看來是找不到呢。
所以Ruby裡沒有 blank? 這個方法,結案。

查詢類別

以空字串 "" 為例,
一樣在Rails console查詢:

2.7.0 :008 > "".class
=> String

.class 查詢前面的物件是什麼類別。

試試在irb查詢:

2.7.0 :011 > "".class
=> String

但其實上面兩個查詢class,用在哪裡是沒差的,別被誤導,只是想確認兩個會是一樣的結果而已。

延伸閱讀

Ruby on Rails 中的 IRB、Pry、rails console 差別
第 12 屆 iT 邦幫忙鐵人賽- Metaprogramming Ruby and Rails 系列
[Ruby] nil?, empty?, blank?, present?, any? methods
.nil? .empty? .blank? .present? 傻傻分不清楚?

--

--

中場休息

休息是為了走更長遠的路,把簡單的成長養成一種放鬆習慣,那豈不一舉兩得?