설명할 수 없는 현상을 만났습니다. 제 코드는 여러 매개변수를 구조체로 묶어 전달합니다. 어떤 함수에서는 잘 받는데 다른 함수에서는 안 됩니다. 다른 분이 보면 제가 놓친 실수를 찾을 수 있을 것 같습니다.
이 MWE는 마지막 줄에서 오류가 나기 전까지 전부 괜찮아 보입니다.
using FlexUnits: QuantFieldVector, DimsMod
using Revise
gravity = 9.81u"m/s^2"
net_load(diameter, config) = @. 2*config.initial_load*(sin(acos((config.drum+config.gap)/(config.drum+diameter)))) - π/4*(diameter^2 - config.core^2)*config.density*gravity
limited_load(diameter, config) = max.(net_load(diameter, config), config.min_load)
line_load(diameter, config) = @. (π/4*(diameter^2 - config.core^2)*config.density*gravity + limited_load(diameter, config))/(2*sin(acos((config.drum+config.gap)/(config.drum+diameter))))
mutable struct Carrier{T} <: QuantFieldVector{7,T}
drum::Quantity{T, D"m"}
gap::Quantity{T, D"m"}
core::Quantity{T, D"m"}
span::Quantity{T, D"m"}
min_load::Quantity{T, D"N/m"}
initial_load::Quantity{T, D"N/m"}
density::Quantity{T, D"kg/m^3"}
end
config = Carrier(26u"in", 31u"mm", 110u"mm", 1.4u"m", 5u"lbf/in",14u"lbf/in", 860u"kg/m^3")
transition_diameter = 0.9u"m"
config.initial_load
net_load(440u"mm", config)
limited_load(440u"mm", config)
line_load(440u"mm", config)
ERROR: FieldError: type Float64 has no field `initial_load`; Float64 has no fields at all.
Stacktrace:
[1] getproperty
@ .\Base_compiler.jl:57 [inlined]
[2] net_load(diameter::Quantity{Float64, StaticDims{m}}, config::Float64)
@ Main .\REPL[83]:2
[3] limited_load(diameter::Quantity{Float64, StaticDims{m}}, config::Float64)
@ Main .\REPL[82]:2
영어에서 번역·원문 보기I've encountered something I can't explain. My code passes several parameters around in a struct. Some functions accept it successfully, while another doesn't. Perhaps somebody else can spot the mistake I'm missing.
Everything in this MWE appears fine until the final line raises an error.
using FlexUnits: QuantFieldVector, DimsMod
using Revise
gravity = 9.81u"m/s^2"
net_load(diameter, config) = @. 2*config.initial_load*(sin(acos((config.drum+config.gap)/(config.drum+diameter)))) - π/4*(diameter^2 - config.core^2)*config.density*gravity
limited_load(diameter, config) = max.(net_load(diameter, config), config.min_load)
line_load(diameter, config) = @. (π/4*(diameter^2 - config.core^2)*config.density*gravity + limited_load(diameter, config))/(2*sin(acos((config.drum+config.gap)/(config.drum+diameter))))
mutable struct Carrier{T} <: QuantFieldVector{7,T}
drum::Quantity{T, D"m"}
gap::Quantity{T, D"m"}
core::Quantity{T, D"m"}
span::Quantity{T, D"m"}
min_load::Quantity{T, D"N/m"}
initial_load::Quantity{T, D"N/m"}
density::Quantity{T, D"kg/m^3"}
end
config = Carrier(26u"in", 31u"mm", 110u"mm", 1.4u"m", 5u"lbf/in",14u"lbf/in", 860u"kg/m^3")
transition_diameter = 0.9u"m"
config.initial_load
net_load(440u"mm", config)
limited_load(440u"mm", config)
line_load(440u"mm", config)
ERROR: FieldError: type Float64 has no field `initial_load`; Float64 has no fields at all.
Stacktrace:
[1] getproperty
@ .\Base_compiler.jl:57 [inlined]
[2] net_load(diameter::Quantity{Float64, StaticDims{m}}, config::Float64)
@ Main .\REPL[83]:2
[3] limited_load(diameter::Quantity{Float64, StaticDims{m}}, config::Float64)
@ Main .\REPL[82]:2