Wywoływana jest metoda „…”

13

Ruby 2.7 został właśnie wydany i zawiera nowe ostrzeżenia dla „Rozdzielenie argumentów pozycyjnych i słów kluczowych” (patrz ich post w wydaniu ). Bawiłem się tym i odkryłem, że jest jeszcze jedno ostrzeżenie, którego nie rozumiem.

Przykład:

def multiply(x:, y:)
  x * y
end

args = { x: 2, y: 3 }

multiply(args)

# ./warning.rb:7: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
# ./warning.rb:1: warning: The called method `multiply' is defined here

Myślę, że pierwsze ostrzeżenie o wycofaniu jest jasne, ale drugie ostrzeżenie The called method `multiply' is defined herejest dla mnie mylące.

Co oznacza drugie ostrzeżenie? Czy ma to związek z pierwszym ostrzeżeniem?

Oba ostrzeżenia znikają podczas dodawania **do wywołania ( multiply(**args)).

lxxxvi
źródło
1
Czy ktoś wie, jak ukryć te ostrzeżenia? Mam ostrzeżenia o wycofaniu, które zapisuję do pliku dziennika, ale nie ma to wpływu na te. Specyfikacja biegania to koszmar w ruby ​​2.7.0
Carl

Odpowiedzi:

15

Co oznacza drugie ostrzeżenie? Czy ma to związek z pierwszym ostrzeżeniem?

Jest jedno ostrzeżenie z tekstem podzielonym na dwie linie. Mówi dosłownie: argsnależy przekonwertować na **args, oto wezwanie, które wywołało to ostrzeżenie, oto jego definicja dla Twojej wygody .

Aleksei Matiushkin
źródło
5
Fajnie, dziękuję! Może to tylko ja, ale to jest dość mylące ...
lxxxvi,
2
@lxxxvi To nie tylko ty. Przybyłem tutaj po dokładnie to samo - jeśli jest to jeden komunikat o błędzie, wydaje mi się, że powinien to być jeden komunikat o błędzie.
Jakub
Jestem naprawdę zdezorientowany, widzę to ostrzeżenie i nie ma nic ponad nim dla i18n.rb, jest to ostrzeżenie jednowierszowe, powyższa linia dotyczy aktywnego wsparcia. Co mam zrobić z tym ostrzeżeniem? </usr/local/lib/ruby/gems/2.7.0/gems/i18n-1.8.2/lib/i18n.rb:195: ostrzeżenie: W tym miejscu zdefiniowano wywoływaną metodę `t '
Hackeron