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 here
jest 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)
).
Odpowiedzi:
Jest jedno ostrzeżenie z tekstem podzielonym na dwie linie. Mówi dosłownie:
args
należy przekonwertować na**args
, oto wezwanie, które wywołało to ostrzeżenie, oto jego definicja dla Twojej wygody .źródło