Metode yang disebut `... 'didefinisikan di sini

13

Ruby 2.7 baru saja dirilis dan muncul peringatan baru untuk "Pemisahan argumen posisi dan kata kunci" (lihat Posting Rilis mereka ). Saya bermain-main dengannya dan menemukan bahwa ada peringatan lain, yang saya tidak mengerti.

Contoh:

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

Saya pikir peringatan pertama tentang penghinaan itu jelas, tetapi peringatan kedua The called method `multiply' is defined heremembingungkan bagi saya.

Apa arti peringatan kedua? Apakah ini terkait dengan peringatan pertama?

Kedua peringatan hilang saat menambahkan **ke panggilan ( multiply(**args)).

lxxxvi
sumber
1
Adakah yang tahu cara menekan peringatan ini? Saya memiliki peringatan penghentian penulisan ke file log, tetapi tidak memengaruhi yang ini. Running specs adalah mimpi buruk di ruby ​​2.7.0
Carl

Jawaban:

15

Apa arti peringatan kedua? Apakah ini terkait dengan peringatan pertama?

Ada peringatan tunggal dengan pemisahan teks menjadi dua baris. Secara harfiah mengatakan: argsharus dikonversi ke **args, di sini adalah panggilan yang menghasilkan peringatan ini, di sini adalah definisi untuk kenyamanan Anda .

Aleksei Matiushkin
sumber
5
Baik, terima kasih! Mungkin hanya aku, tapi ini cukup membingungkan ...
lxxxvi
2
@ lxxxvi Bukan hanya kamu. Saya datang ke sini untuk hal yang persis sama - jika itu satu pesan kesalahan, saya merasa seperti itu harus menjadi satu pesan kesalahan.
Yakub
Saya benar-benar bingung, saya melihat peringatan ini dan tidak ada yang di atasnya untuk i18n.rb, ini adalah peringatan satu baris, baris di atas berkaitan dengan dukungan aktif. Apa yang harus saya lakukan dengan peringatan ini? </usr/local/lib/ruby/gems/2.7.0/gems/i18n-1.8.2/lib/i18n.rb:195: peringatan: Metode yang dipanggil `t 'didefinisikan di sini
Hackeron