Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 计算字符串检查是否为整数_Ruby - Fatal编程技术网

Ruby 计算字符串检查是否为整数

Ruby 计算字符串检查是否为整数,ruby,Ruby,我试图从这个数组中只输出整数值 perms=["12+2*4","2+2","-2+","12+34-","12-3/4"] perms.each do |line| if (line.to_s =~ /^\d+(?:[+\/*-]\d+)*$/) puts "#{line}" if(!(eval(line).to_s=~ /\A\d+\z/)) puts "#{line}=#{eval(line)}" end

我试图从这个数组中只输出整数值

perms=["12+2*4","2+2","-2+","12+34-","12-3/4"]
perms.each do |line|
    if (line.to_s =~ /^\d+(?:[+\/*-]\d+)*$/)
        puts "#{line}"
        if(!(eval(line).to_s=~ /\A\d+\z/))
            puts "#{line}=#{eval(line)}"
        end
    end
我得到:

12+2*4
2+2
12-3/4
而不是我所期望的:

12+2*4
12+2*4=20
2+2
2+2=4

(12-3/4的计算结果不是整数,因此此处不应包括在内)

如果与正则表达式的字符串不匹配,则
=~
运算符返回nil。如果确实找到匹配项,则返回找到的匹配项的偏移量。因此,您可能需要
nil
整数。您的第二个if语句否定了匹配返回的内容。如果对
nil
求反,则得到
true
,但如果对整数求反,则得到
false
。这意味着你的逻辑是反向的。通过添加对
nil
的检查,逻辑将按预期工作

perms=["12+2*4","2+2","-2+","12+34-","12-3/4"]
perms.each do |line|
    if (line.to_s =~ /^\d+(?:[+\/*-]\d+)*$/)
        puts "#{line}"
        if(!(eval(line).to_s =~ /\A\d+\z/).nil?)
            puts "#{line}=#{eval(line)}"
        end
    end
end
有了这种理解,您甚至可以完全删除否定操作以获得相同的结果。为了实现这一点,您可以将其存储在变量中,而不是两次
eval(line)
,尽管这更多的是关于首选项

perms=["12+2*4","2+2","-2+","12+34-","12-3/4"]
perms.each do |line|
    if (line.to_s =~ /^\d+(?:[+\/*-]\d+)*$/)
        puts "#{line}"
        result = eval(line)
        if(result.to_s =~ /\A\d+\z/)
            puts "#{line}=#{result}"
        end
    end
end