我可以声明一个数组,其中一个数组元素是未声明的变量吗? (红宝石)

时间:2010-01-25 03:08:37

标签: ruby declaration

#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"),它将替换所有哈希值中的值。这是不希望的。我希望所有哈希值保持正确的值。

EDIT2:更详细的示例代码

`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的值为“”而不是“从网上刮下的值”。怎么样?

2 个答案:

答案 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”的对象。希望这适合你。