如何在 Julia 中重新分配连接结果?
How to reassign result of concatenation in Julia?
我需要在 Julia 中创建 Vector
个预定义结构。截至目前,我正在尝试通过迭代连接来做到这一点:
struct Scenario
prob::Float64 # probability
time::Float64 # duration of visit
profit::Int64 # profit of visit
end
possible_times = [60, 90, 120, 150, 180]
scenarios = Scenario[]
for point in 1:num_points
profit = rand(1:4)
new_scenario = [Scenario(0.2, possible_times[i], profit) for i=1:5]
scenarios = vcat(scenarios, new_scenario)
end
display(scenarios)
但我得到了以下
Warning: Assignment to `scenarios` in soft scope is ambiguous because a global variable by the same name exists: `scenarios` will be treated as a new local. Disambiguate by using `local scenarios` to suppress this warning or `global scenarios` to assign to the existing global variable.
ERROR: LoadError: UndefVarError: scenarios not defined
那么第一个问题就是如何保存中间拼接的结果呢?第二个问题是实现目标的正确方法吗?还是我做错了还有别的办法?
通常使用append!
代替vcat
:
for point in 1:num_points
profit = rand(1:4)
new_scenario = [Scenario(0.2, possible_times[i], profit) for i=1:5]
append!(scenarios, new_scenario)
end
如果您想使用 vcat
,请使用 global
关键字:
for point in 1:num_points
profit = rand(1:4)
new_scenario = [Scenario(0.2, possible_times[i], profit) for i=1:5]
global scenarios = vcat(scenarios, new_scenario)
end
要点是,在 scenarios = vcat(scenarios, new_scenario)
中,您重新分配了全局范围内的 scenarios
变量。
总的来说,情况有点复杂(Julia 的行为将取决于代码是 运行 交互式还是 non-interactive 会话),您可以在 this section 的 Julia 手册(本节中关于 Soft scope 的项目符号 3)。但是,如果您不想深入研究作用域的细节,一个简单而安全的规则是:如果您分配给一个全局变量,则在分配操作前加上 global
.
我需要在 Julia 中创建 Vector
个预定义结构。截至目前,我正在尝试通过迭代连接来做到这一点:
struct Scenario
prob::Float64 # probability
time::Float64 # duration of visit
profit::Int64 # profit of visit
end
possible_times = [60, 90, 120, 150, 180]
scenarios = Scenario[]
for point in 1:num_points
profit = rand(1:4)
new_scenario = [Scenario(0.2, possible_times[i], profit) for i=1:5]
scenarios = vcat(scenarios, new_scenario)
end
display(scenarios)
但我得到了以下
Warning: Assignment to `scenarios` in soft scope is ambiguous because a global variable by the same name exists: `scenarios` will be treated as a new local. Disambiguate by using `local scenarios` to suppress this warning or `global scenarios` to assign to the existing global variable.
ERROR: LoadError: UndefVarError: scenarios not defined
那么第一个问题就是如何保存中间拼接的结果呢?第二个问题是实现目标的正确方法吗?还是我做错了还有别的办法?
通常使用append!
代替vcat
:
for point in 1:num_points
profit = rand(1:4)
new_scenario = [Scenario(0.2, possible_times[i], profit) for i=1:5]
append!(scenarios, new_scenario)
end
如果您想使用 vcat
,请使用 global
关键字:
for point in 1:num_points
profit = rand(1:4)
new_scenario = [Scenario(0.2, possible_times[i], profit) for i=1:5]
global scenarios = vcat(scenarios, new_scenario)
end
要点是,在 scenarios = vcat(scenarios, new_scenario)
中,您重新分配了全局范围内的 scenarios
变量。
总的来说,情况有点复杂(Julia 的行为将取决于代码是 运行 交互式还是 non-interactive 会话),您可以在 this section 的 Julia 手册(本节中关于 Soft scope 的项目符号 3)。但是,如果您不想深入研究作用域的细节,一个简单而安全的规则是:如果您分配给一个全局变量,则在分配操作前加上 global
.