#input_from_the_net = ""
my_array = [ ["Header name" , input_from_the_net] ]
input_from_the_net = "a value scraped from the net"
puts "#{my_array[0][0]} is #{my_array[0][1]}"
我稍后在循环中使用变量input_from_the_net
并将其值分配给散列。然后将该哈希存储在另一个哈希中。如果我使用input_from_the_net.replace("a value scraped from the net")
,它将替换所有哈希值中的值。这是不希望的。我希望所有哈希值保持正确的值。
`require 'pp'
input_from_the_net = ""
def parse_the_website()
(0..5).each { |index|
input_from_the_net = index+23
@my_hash[index] = {@my_array[0][0] => input_from_the_net}
}
end
@my_array = [ ["Header name" , input_from_the_net] ]
#my_array is used on different places of the code
@my_hash = {}
parse_the_website
pp @my_hash
Q1:我可以让工作而不是改变行的顺序吗?
Q2:如果我取消注释#input_from_the_net = ""
,则打印时变量input_from_the_net的值为“”而不是“从网上刮下的值”。怎么样?
答案 0 :(得分:5)
您可以保持相同的顺序,但需要使用replace
:
input_from_the_net = ""
my_array = [ ["Header name" , input_from_the_net] ]
input_from_the_net.replace("a value scraped from the net")
puts "#{my_array[0][0]} is #{my_array[0][1]}"
# Outputs: Header name is a value scraped from the net
每次将=
与字符串一起使用时,它会创建一个新字符串并将其分配给变量。要在不创建新字符串的情况下替换它,请使用String.replace
方法。
为了好玩,您可以使用irb
对此进行测试:
>> str = "Hello"
=> "Hello"
>> str.object_id
=> 2156902220 # original id
>> str = "New String"
=> "New String"
>> str.object_id
=> 2156889960 # different id
>> str.replace("Third String")
=> "Third String"
>> str.object_id
=> 2156889960 # same id
答案 1 :(得分:1)
我建议做一个简单的课程:
class Netinput
attr_accessor :netinput
def initialize(netinput = "")
@netinput = netinput
end
end
然后像这样使用它:
input_from_the_net = "our test string"
#Netinput can take a string or no argument
my_array = [ ["Header name" , Netinput.new()] ]
my_array[0][1].netinput = input_from_the_net
puts "#{my_array[0][0]} is #{my_array[0][1].netinput}"
# Outputs: Header name is our test string
使用这种方法,每个数组的第二个元素是一个具有自己的实例变量“netinput”的对象。希望这适合你。