我正在使用quaternion gem,并希望為:[]運算子定義一個類方法,以便從陣列中創建一個新的四元陣列。 我已經嘗試了
Quaternion.class_eval do
def self. [ary]
Quaternion.new(*ary)
結束。
結束。
但這給出了一個語法錯誤。我應該怎么做呢?
uj5u.com熱心網友回復:
該方法的名稱是[],但它仍然以通常的方式接受其引數串列
def self.
...
end
那么你就以Quaternion[ry]
uj5u.com熱心網友回復:
所以長話短說,為了能夠利用Quaternion[arg],你要像下面這樣定義它
def self. [](arg)
Quaternion.new(*ary)
結束。
有趣的是,為什么它能作業? 嗯,這是ruby的語法糖
。執行foo[bar]與foo.[](bar)
foo[bar]=baz與foo.[]=(bar, baz)
而a b實際上是a. (b)
如果你想定義它,它將會是這樣的:
def [](key)<
...
end
def []=(key, value) ...
...
end
def (arg) ...
...
end
這是因為Ruby中的方法名可以有特殊字符。
如果你對內部如何進行標記和決議感興趣,你可以閱讀Ruby Under Microscope,這是一個很好的介紹。還有一本我發現的免費書籍也涉及到了這個話題--> https://ruby-hacking-guide.github.io/(查看第8章的方法呼叫部分)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/307606.html
標籤:
