红宝石 - 从字符串获得第n个字符

问题描述:

我想从#{vm}中获得第5到第7个字符,但是我似乎无法使其工作。我错过了什么?红宝石 - 从字符串获得第n个字符

puts "#{Colorable.wrap_color("Restarting VM's", :BLUE)}" 
change_set.vms_to_restart.each do |vm| 

puts "JH 0 - " + %x{hostname} 
host_code = %x{hostname}[7,9] 
vm_code = #vm[5,7] <---- THIS DOES NOT WORK 

puts "JH 1 - #{host_code}" 
puts "JH 2 - #{vm_code}" 
puts "JH 3 - #{vm}" 

    puts "Restarting ... #{vm}" 
exit 1 
    vm.restart 
end 
puts " " 

输出:

Restarting VM's 
JH 0 - qdscild401 
JH 1 - 401 
JH 2 -     <---------- BLANK 
JH 3 - qdcld401.vm10 
Restarting ... qdcld401.vm10 
+0

怎么样'vm_code = “#{VM [5,7]}”' –

+0

不能再现。 – sawa

+0

上面的vm_code =“#{vm [5,7]}”给了我这个错误: ./do_changes.rb:76:未定义的方法'[]'为#(NoMethodError) from ./do_changes.rb:72:in'each' from ./do_changes.rb:72 – Jaron787

在此代码:

vm_code = #vm[5,7] 

一切后,#是一条评论。因此,这种说法实际上是:

vm_code = nil 

该行应

vm_code = vm[5,7] 

或者,如果vm对象不是String你可以尝试

vm_code = vm.to_s[5,7] 

该多好啊 - 我想

vm_code = vm.to_s[5,7] 

但一直没有修剪掉一切的第7个字符

Restarting VM's 
JH 0 - qdscild401 
JH 1 - 401 
JH 2 - 401.vm1   <----- NOT TRIMMED after 7th 
JH 3 - qdcld401.vm10 
Restarting ... qdcld401.vm10 
+0

“我正在尝试从#{vm}中获得第5到第7个字符”,所以当然第7个字符后的所有内容都将被删除!!!!! – ReggieB

+0

是的,但它没有修剪它 – Jaron787

+0

啊,因为它需要是:vm_code = vm.to_s [5,3] – Jaron787

后,只是为了澄清,vm[5,7]意味着拿到第六个字符和六个附加字符后(总共7个字符)。

所以

vm = 'abcdefghijklmno' 
vm[5,7] 
=> 'fghijkl' 

如果只想第五个字符到第七个字符

vm[4,3] 
=> 'efg' 
+0

好点 - 提出 – ReggieB

+0

感谢澄清 - 我没有意识到 – Jaron787

+0

@CarySwoveland像往常一样精心设计。 – SteveTurczyn