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