在某个时候,(我认为是Julia v0.7)您可以执行impl From<&Value> for ShyValue {
fn from(v: &Value) -> Self {
match v {
Value::Null => ShyValue::Scalar(ShyScalar::Null),
Value::Bool(b) => b.into(),
// A Value::String may represent any of several ShyValue variants, so must be parsed.
// The prefix (if any) usually determines which variant to create.
Value::String(ref nan) if nan.to_lowercase() == "nan" => {
ShyValue::Scalar(f64::NAN.into())
}
Value::String(ref err) if err.starts_with("Error: ") => {
ShyValue::error(err[7..].into())
}
Value::String(ref func_name) if func_name.starts_with("FunctionName: ") => {
ShyValue::FunctionName(func_name[13..].into())
}
Value::String(ref prop_chain) if prop_chain.starts_with("PropertyChain: ") => {
ShyValue::property_chain(prop_chain[15..].into())
}
Value::String(ref variable) if variable.starts_with("Variable: ") => {
ShyValue::Variable(variable[10..].into())
}
Value::String(s) => s.clone().into(),
Value::Number(ref n) if (*n).is_i64() => {
ShyValue::Scalar(ShyScalar::Integer(n.as_i64().unwrap()))
}
Value::Number(ref f) => ShyValue::Scalar(ShyScalar::Rational(f.as_f64().unwrap())),
Value::Array(a) => ShyValue::Vector(
a.iter()
.map(|item| match item {
Value::Null => ShyScalar::Null,
Value::Bool(b) => (*b).into(),
Value::String(s) => s.clone().into(),
Value::Number(ref n) if (*n).is_i64() => {
ShyScalar::Integer(n.as_i64().unwrap())
}
Value::Number(ref f) => ShyScalar::Rational(f.as_f64().unwrap()),
_ => ShyScalar::Error("Unsupported type of scalar".into()),
})
.collect(),
),
Value::Object(o) => {
let shy_object = ShyObject::empty();
{
let mut assoc = shy_object.as_deref_mut();
for (key, value) in o {
assoc.set(key, value.into());
}
}
ShyValue::Object(shy_object)
}
}
}
}
以便使用Julia加载文件。我尝试在v0.7上运行此命令,以查看是否收到过时警告,但即使在0.7上,它也表明@load loadpath thingtoload
未定义。
如何使用Julia编程加载文件?
答案 0 :(得分:1)
恐怕你的问题太含糊了。如何加载文件很大程度上取决于您拥有的文件类型。是否要读取二进制文件?什么样的二进制文件?还是文本文件?
但是,由于您提到了@load
,所以大概是您在使用JLD.jl或其后续版本JLD2.jl。
使用JLD2的简单示例是
julia> using JLD2
julia> @save "test.jld2" x
julia> x = nothing # "forgetting" x
julia> @load "test.jld2"
1-element Array{Symbol,1}:
:x
julia> x
2×2 Array{Float64,2}:
0.698264 0.319665
0.252174 0.80799
请注意,由于它是软件包功能,而不是Base(或stdlib)的一部分,因此不会在0.7中显示。
(另请参阅堂兄线程How to save a file in Julia?)