我正在嘗試這個irb,Ruby 版本 3:
3.0.0 :001 > num = 42
=> 42
3.0.0 :002 > num.is_a?(Integer) && num > 10
=> true
3.0.0 :003 > num.is_a? Integer && num > 10
Traceback (most recent call last):
5: from /Users/kai/.rvm/rubies/ruby-3.0.0/bin/irb:23:in `<main>'
4: from /Users/kai/.rvm/rubies/ruby-3.0.0/bin/irb:23:in `load'
3: from /Users/kai/.rvm/rubies/ruby-3.0.0/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>'
2: from (irb):3:in `<main>'
1: from (irb):3:in `is_a?'
TypeError (class or module required)
為什么我需要括號:
v.is_a?(Integer)
?
運算子優先級如何作業?
為什么 Ruby 在這種情況下會生成如此神秘的錯誤訊息?
經過一番挖掘,我發現以前在這里回答了這個問題: Ruby 'is_a?' 需要類或模塊(TypeError)
以及這里解決的基本問題: 帶括號和不帶括號的方法呼叫的優先級是什么?
參考官方 Ruby 檔案: https ://ruby-doc.org/core-3.0.0/doc/syntax/precedence_rdoc.html
但我覺得我的所有問題都沒有得到解答。有人愿意把這一切都包得干干凈凈嗎?
uj5u.com熱心網友回復:
為什么我需要括號:
v.is_a?(Integer)
您需要括號來指定您傳遞給該is_a?方法的內容。沒有它們,Ruby 會計算整個Integer && num > 10運算式并將其傳遞給方法。
運算子優先級如何作業?
is_a?不是運算子,因此它沒有優先級。運算式在傳遞給方法之前被評估,這就是正在發生的一切。
為什么 Ruby 在這種情況下會生成如此神秘的錯誤訊息?
Ruby 正在評估Integer && num > 10給出true. 然后將該值傳遞給num.is_a?. is_a?然后給出 aTypeError它期望的類或模塊,而不是布林值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480486.html
上一篇:如何在railsactiveadmin中使用引數呼叫另一個操作?
下一篇:NGINX-處理ID或用戶名
