Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 获得;TypeError:没有将Regexp隐式转换为整数;尝试从字符串中提取数字时_Ruby_Regex_Model_Ruby On Rails 5 - Fatal编程技术网

Ruby 获得;TypeError:没有将Regexp隐式转换为整数;尝试从字符串中提取数字时

Ruby 获得;TypeError:没有将Regexp隐式转换为整数;尝试从字符串中提取数字时,ruby,regex,model,ruby-on-rails-5,Ruby,Regex,Model,Ruby On Rails 5,我使用的是Rails 5。我在提取字段的数字部分并将其插入模型属性时遇到问题。我有 puts "age:#{age}" self.age = age[/\d+/].present? ? age[/\d+/].to_i : nil 但我得到了输出 age:41 TypeError: no implicit conversion of Regexp into Integer from /Users/davea/Documents/workspace/myproject/app/mo

我使用的是Rails 5。我在提取字段的数字部分并将其插入模型属性时遇到问题。我有

  puts "age:#{age}"
  self.age = age[/\d+/].present? ? age[/\d+/].to_i : nil
但我得到了输出

age:41
TypeError: no implicit conversion of Regexp into Integer
    from /Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:129:in `[]'
    from /Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:129:in `set_age'
    from /Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:51:in `block in <class:RaceTime>'
年龄:41岁
TypeError:没有将Regexp隐式转换为整数
from/Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:129:in`[]'
from/Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:129:in'set_age'
from/Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:51:in'block in'

有没有更好的方法来编写上面的内容来提取数字(如果有),同时避免我看到的错误?

您的
age
变量可能是一个数字。当我尝试使用带有数字的
[/regex/]
方法时,我会遇到相同的错误:

[5] pry(main)> 1[//]
TypeError: no implicit conversion of Regexp into Integer

你可以说年龄=年龄。首先,我认为你最好这样写:

str = "sometext 123 sometext"
self.age = /(?<age>\d+)/ =~ str.to_s ? age.to_i : nil
str=“sometext 123 sometext”
self.age=/(?\d+)/=~str.to\s?年龄:零

错误消息告诉您,您正在调用的
[]
需要一个参数,因此它尝试将转换为一个
整数(通过调用),但失败,因为
Regexp
没有对
to int
做出响应

由于确实将
Regexp
作为参数,因此
age
引用的对象显然不能是a,它必须是其他对象。不幸的是,你没有告诉我们它是什么对象(你真的应该在你的问题中包含这样的信息!),但我们可以做出一个有根据的猜测:在Ruby中,我能想到的只有三个
[]
方法,这可能会引起这个确切的错误:,和。因此,我在这一点上的最佳猜测是,您的
age
对象实际上不是
字符串,而是一个对象、一个或一个

但是,我们可以做得更好:你在你的问题中包括了调查的结果。返回类似于
'[1,2,3]'
的内容,但您的问题显示
age.to\s
返回类似于
'41'
的内容。所以,它不能是
数组


因此,
age
要么是一个
MatchData
对象,要么是一个
整数
,但您希望它是一个
字符串
。你需要弄清楚年龄是从哪里来的,为什么它不是你所期望的,然后解决这个问题。

我不明白。你什么意思?哦,你是个新手,对吧?在控制台中输入“str=”123“,然后输入“str[/\d+/]”。看你那奇怪的语言!如果
age
确实是一个数字,那么首先将其转换为字符串,然后提取数字,然后将其解析为一个数字是没有意义的,而这个数字正是您开始使用的数字。