caller_method возвращает не то значение, которое я ожидал - PullRequest
0 голосов
/ 05 февраля 2020

Я хочу знать, какой метод вызывает другой метод (я просто пытаюсь создать модель простого ожидаемого ("string"). To eq ("string") (как в RSpect, но более просто).

Но я получаю «главное», что это? (Впервые вижу «главное»)

public

def expect(message)
  message.to_s
end

def to
  caller_method = caller_locations.first.label
  puts caller_method
end

expect("test").to #=> <main>
#what output i expected:
expect("test").to #=> expect

Моя цель:

#first i need to do something like that:
expect("test").to eq("test") #=> true
#final must look like this:
expect(expect("test").to eq("test")).to eq(true) #=> true

1 Ответ

0 голосов
/ 05 февраля 2020

Я бы рекомендовал не использовать caller_method в этом случае. Скорее создайте класс, чьи методы возвращают self - таким образом они будут цепочечными:

module Expectation
  attr_accessor :caller_method
  def expect(arg)
    self.caller_method = "expect"
    self
  end
  def to
    caller_method
  end
end

include Expectation

expect("foo").to
# => "expect"

Очевидно, что это только отправная точка, и на самом деле это еще не делает никаких сравнений / проверок. Но, надеюсь, вы можете понять эту схему. Ключевым моментом является возвращение self для создания цепочки API и сохранение внутреннего состояния с использованием чего-то вроде attr_accessor

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