Ruby / Rails 有這個方法嗎? 這是什麼類別?
之前的自我練習真的太少了,那就來補吧。
這篇可能沒有跟Meta Programming沾到邊。
一開始學Ruby,可能會問:「啊你怎麼知道有這方法可以用?」
除了「你不會知道你不知道的事」之外的回答,就是「看文件」。
找飯店? 「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? 傻傻分不清楚?