diff --git a/src/interpreter/mod.rs b/src/interpreter/mod.rs index 26d842c..3d0b133 100644 --- a/src/interpreter/mod.rs +++ b/src/interpreter/mod.rs @@ -71,18 +71,30 @@ impl std::fmt::Debug for Value { } } +impl Value { + /// 容器内值的格式化:字符串加引号以区分类型,其余类型用 Display + fn fmt_element(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + Value::String(s) => write!(f, "\"{}\"", s), + other => write!(f, "{}", other), + } + } +} + impl fmt::Display for Value { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { Value::Number(n) => write!(f, "{}", n), - Value::String(s) => write!(f, "\"{}\"", s), + Value::String(s) => write!(f, "{}", s), Value::Bool(b) => write!(f, "{}", b), Value::Nil => write!(f, "nil"), Value::Object(obj) => { let obj = obj.borrow(); write!(f, "{{ ")?; for (key, value) in obj.iter() { - write!(f, "{}: {}, ", key, value)?; + write!(f, "{}: ", key)?; + value.fmt_element(f)?; + write!(f, ", ")?; } write!(f, "}}") }, @@ -93,7 +105,7 @@ impl fmt::Display for Value { if i > 0 { write!(f, ", ")?; } - write!(f, "{}", val)?; + val.fmt_element(f)?; } write!(f, "]") },