pub enum Value {
Undefined,
Null,
Bool(bool),
Number(f64),
Str(Rc<String>),
BigInt(Rc<BigInt>),
Object(ObjRef),
}Expand description
JS の値。プリミティブ + オブジェクト参照。
Variants§
Undefined
Null
Bool(bool)
Number(f64)
Str(Rc<String>)
BigInt(Rc<BigInt>)
任意精度整数 BigInt。
Object(ObjRef)
Implementations§
Source§impl Value
impl Value
pub fn str(s: impl Into<String>) -> Value
pub fn bigint(b: BigInt) -> Value
pub fn object(o: ObjRef) -> Value
Sourcepub fn to_js_string(&self) -> String
pub fn to_js_string(&self) -> String
ECMAScript ToString(簡易・表示用)。
Sourcefn to_js_string_seen(&self, seen: &mut Vec<ObjRef>) -> String
fn to_js_string_seen(&self, seen: &mut Vec<ObjRef>) -> String
to_js_string の内部実装。Array の要素文字列化は再帰的に自分自身の
to_js_string を呼ぶため、var a=[1]; a.push(a); a.join()(あるいは
String(a)/テンプレートリテラル補間等、内部的に同じ経路を通る操作)が
循環参照でスタックオーバーフロー(この no_std 環境ではクラッシュ/ハングに
なり得る)していた。structuredClone/JSON.stringify/console.log で
既に修正済みの「祖先を追跡して打ち切る」パターンをここにも適用し、
既に祖先に現れた配列を再訪した時点で空文字列を返して打ち切る
(実ブラウザは無条件のスタックオーバーフローで RangeError を投げるが、
この処理系は例外化されない Rust ネイティブ再帰でのクラッシュを避ける
ことを優先し、値としては空文字列で打ち切る簡略挙動とする。
a=[1]; a.push(a); a.join() は "1,1," になる——2番目の要素 a 自身の
to_js_string() が、その内部で自分自身を再訪した時点(3階層目)で
空文字列に切り詰められるため)。
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Value
impl !Send for Value
impl !Sync for Value
impl !UnwindSafe for Value
impl Freeze for Value
impl Unpin for Value
impl UnsafeUnpin for Value
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more