Hier wird die aufgerufene Methode `… 'definiert

13

Ruby 2.7 wurde gerade veröffentlicht und enthält diese neuen Warnungen für "Trennung von Positions- und Schlüsselwortargumenten" (siehe deren Veröffentlichungsbeitrag ). Ich habe damit herumgespielt und festgestellt, dass es eine weitere Warnung gibt, die ich nicht verstehe.

Beispiel:

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

Ich denke, die erste Warnung bezüglich der Abwertung ist klar, aber die zweite Warnung The called method `multiply' is defined hereist für mich verwirrend.

Was bedeutet die zweite Warnung? Bezieht es sich auf die erste Warnung?

Beide Warnungen verschwinden beim Hinzufügen **zum Aufruf ( multiply(**args)).

lxxxvi
quelle
1
Weiß jemand, wie man diese Warnungen unterdrückt? Ich habe Verfallswarnungen, die in die Protokolldatei geschrieben werden, aber diese sind davon nicht betroffen. Running Specs ist ein Albtraum in Ruby 2.7.0
Carl

Antworten:

15

Was bedeutet die zweite Warnung? Bezieht es sich auf die erste Warnung?

Es gibt eine einzelne Warnung mit einem in zwei Zeilen aufgeteilten Text. Es heißt wörtlich: argsSollte konvertiert werden zu **args, hier ist der Aufruf, der diese Warnung erzeugt hat, hier ist seine Definition für Ihre Bequemlichkeit .

Aleksei Matiushkin
quelle
5
Nett, danke!
Vielleicht bin
2
@lxxxvi Es sind nicht nur Sie. Ich bin wegen genau der gleichen Sache hierher gekommen - wenn es sich um eine Fehlermeldung handelt, sollte es meiner Meinung nach eine Fehlermeldung sein.
Jacob
Ich bin wirklich verwirrt, ich sehe diese Warnung und es gibt nichts darüber für i18n.rb, dies ist eine einzeilige Warnung, die obige Zeile bezieht sich auf aktive Unterstützung. Was soll ich gegen diese Warnung tun? </usr/local/lib/ruby/gems/2.7.0/gems/i18n-1.8.2/lib/i18n.rb:195: Warnung: Die aufgerufene Methode `t 'ist hier definiert
Hackeron