Как OFX определяет учетную запись, которая будет доступна в блоке? - PullRequest
0 голосов
/ 24 сентября 2018

Код в модуле OFX связывает переменную account так, что я просто не могу понять, откуда она взялась!

Как это работает?Я ожидал получить неопределенную переменную или что-то еще, но она ДОЛЖНА работать!

require "ofx"

OFX("file.ofx") do
   p account
   p account.balance
   p account.transactions
end

Откуда взялась эта account и как использовать эту технику!?

https://github.com/annacruz/ofx

1 Ответ

0 голосов
/ 24 сентября 2018

Это называется отправка сообщения (другие языки называют это вызов метода ).Отправка сообщений является фундаментальной особенностью Ruby.В Ruby, в отличие от других языков (например, Python), вам не нужно указывать получателя сообщения, отправленного явно, получатель будет неявно равен self, если он не указан явно.

Итак, вашкод по существу (в некоторой степени) эквивалентен

self.OFX("file.ofx") do
   self.p(self.account())
   self.p(self.account().balance())
   self.p(self.account().transactions())
end

Примечание: он не эквивалентен на 100% из-за правил для private методов.Методы private могут быть вызваны только в результате отправки сообщения с неявным получателем, поэтому даже если p и self.p отправляют одно и то же сообщение одному и тому же получателю, работает только первоепотому что p равен private и может вызываться только без явного получателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...