Ruby 2.7 特定警告未显示
Ruby 2.7 specific warning not showing
我们想将我们的代码库更新到 Ruby3,其中最大的突破性变化之一是关键字参数与方法中参数的混合。这个警告应该出现
warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
但我注意到当 运行 一个简单的脚本时,它就不会出现
# script.rb
def my_method(argument, other:)
puts "hello"
end
options = { other: "medium" }
argument = true
my_method(argument, options)
$ rvm use 2.7.5
$ ruby script.rb
hello
$ rvm use 3.0.1
$ ruby script.rb
script.rb:1:in `my_method': wrong number of arguments (given 2, expected 1; required keyword: other) (ArgumentError)
from script.rb:8:in `<main>'
它在 Ruby 3 中按计划中断,但在以前的版本中没有显示任何内容。
这种行为在我们的生产中是相同的,我无法在任何地方发现一次。我已经使用 RUBYOPT='-W:deprecated'
甚至 $VERBOSE = true
成功列出了除此之外的其他几个弃用警告。
看了一圈,其他人好像没有这个问题。我在这里缺少什么吗? Ruby里面有选项吗?使用其他版本的 Ruby,如 2.7.2 呈现相同。
另一个细节,我们在 Rails 吨 运行 一切上使用 Ruby,但我相信问题出在 Ruby 本身。
我发现了一些东西。首先,Ruby 2.7.2 及更高版本默认不显示警告,这可以解释我测试中的行为差异。要激活它们,您必须使用 RUBYOPT
# Ruby 2.7.5
$ RUBYOPT='-W:deprecated' ruby script.rb
script.rb:8: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
script.rb:1: warning: The called method `my_method' is defined here
hello
另一点是,您稍后可以设置的$VERBOSE = true
也无法显示此警告。我不确定具体原因,但只有 RUBYOPT
可以解决这个特定问题。
最后,我在本地启动我的 Rails 服务器时也错误地使用了 RUBYOPT
选项,因此没有看到它工作。
希望对您有所帮助。
我们想将我们的代码库更新到 Ruby3,其中最大的突破性变化之一是关键字参数与方法中参数的混合。这个警告应该出现
warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
但我注意到当 运行 一个简单的脚本时,它就不会出现
# script.rb
def my_method(argument, other:)
puts "hello"
end
options = { other: "medium" }
argument = true
my_method(argument, options)
$ rvm use 2.7.5
$ ruby script.rb
hello
$ rvm use 3.0.1
$ ruby script.rb
script.rb:1:in `my_method': wrong number of arguments (given 2, expected 1; required keyword: other) (ArgumentError)
from script.rb:8:in `<main>'
它在 Ruby 3 中按计划中断,但在以前的版本中没有显示任何内容。
这种行为在我们的生产中是相同的,我无法在任何地方发现一次。我已经使用 RUBYOPT='-W:deprecated'
甚至 $VERBOSE = true
成功列出了除此之外的其他几个弃用警告。
看了一圈,其他人好像没有这个问题。我在这里缺少什么吗? Ruby里面有选项吗?使用其他版本的 Ruby,如 2.7.2 呈现相同。
另一个细节,我们在 Rails 吨 运行 一切上使用 Ruby,但我相信问题出在 Ruby 本身。
我发现了一些东西。首先,Ruby 2.7.2 及更高版本默认不显示警告,这可以解释我测试中的行为差异。要激活它们,您必须使用 RUBYOPT
# Ruby 2.7.5
$ RUBYOPT='-W:deprecated' ruby script.rb
script.rb:8: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
script.rb:1: warning: The called method `my_method' is defined here
hello
另一点是,您稍后可以设置的$VERBOSE = true
也无法显示此警告。我不确定具体原因,但只有 RUBYOPT
可以解决这个特定问题。
最后,我在本地启动我的 Rails 服务器时也错误地使用了 RUBYOPT
选项,因此没有看到它工作。
希望对您有所帮助。