Ruby 命名错误:未定义的方法`+';对于nil:NilClass-正则表达式混淆

Ruby 命名错误:未定义的方法`+';对于nil:NilClass-正则表达式混淆,ruby,comparison,Ruby,Comparison,有人能帮我找出为什么我会犯这个错误吗 我有一个if声明如下 if (x + ship.size) <= 10 我从类对象中类似的正则表达式中检索ship.size 据我所知,在两个正则表达式中使用\d会使ship.size和x都成为整数。因此,不应该将+视为加法而不是未定义的方法吗?任何帮助都将不胜感激。谢谢。正则表达式对字符串进行操作。即使使用\d匹配仍将是字符串: "foo123bar"[/\d+/] #=> "123" #

有人能帮我找出为什么我会犯这个错误吗

我有一个if声明如下

if (x + ship.size) <= 10
我从类对象中类似的正则表达式中检索ship.size


据我所知,在两个正则表达式中使用\d会使ship.size和x都成为整数。因此,不应该将+视为加法而不是未定义的方法吗?任何帮助都将不胜感激。谢谢。

正则表达式对字符串进行操作。即使使用
\d
匹配仍将是字符串:

"foo123bar"[/\d+/] #=> "123"
#                      ^---^ note the quotes, this is a string
如果需要整数,则必须自己转换结果,例如通过:

如果没有找到匹配项,您将得到
nil

"fooxyzbar"[/\d+/] #=> nil

关于您的错误消息:

NoMethodError:nil:NilClass的未定义方法“+”

表示
+
的接收器为
nil
。在代码中:

if (x + ship.size) <= 10
仔细检查如何检索
x
。像这样的方法应该会奏效:

"123,456" =~ /(\d+),(\d+)/

x = $1.to_i #=> 123
y = $2.to_i #=> 456

(1,2)
不是字符串。它应该抛出一个错误。你的实际代码是什么?@EmilyRivas:这不可能是你执行的实际代码,因为
(1,2)=~/(\d+),(\d+)/
会给你一个语法错误。在
irb
中尝试!请发一封信。我应该能够完全按照您提供的方式运行您的代码,并看到与您相同的结果<代码>(1,2)=~/(\d+),(\d+)/是无效代码。也许您的意思是
“(1,2)”=~/(\d+),(\d+)/
,但是,这意味着
x==“1”
(不是
nil
,但也不是整数!),因此它仍然无法解释您的错误消息。更清楚的是,
x
nil
;这与
发货
发货.尺寸
无关。
if (x + ship.size) <= 10
if (nil + ship.size) <= 10
"123,456" =~ /(\d+),(\d+)/

x = $1.to_i #=> 123
y = $2.to_i #=> 456