Let for-loop iterate Dict with an iterator (#3318)
This commit is contained in:
parent
42f59af812
commit
c06a71f653
@ -145,8 +145,8 @@ impl Eval for ast::ForLoop<'_> {
|
||||
iter!(for pattern in array);
|
||||
}
|
||||
(_, Value::Dict(dict)) => {
|
||||
// Iterate over pairs of dict.
|
||||
iter!(for pattern in dict.pairs());
|
||||
// Iterate over key-value pairs of dict.
|
||||
iter!(for pattern in dict.iter());
|
||||
}
|
||||
(Pattern::Normal(_) | Pattern::Placeholder(_), Value::Str(str)) => {
|
||||
// Iterate over graphemes of string.
|
||||
|
@ -9,7 +9,7 @@ use smallvec::SmallVec;
|
||||
use unicode_math_class::MathClass;
|
||||
|
||||
use crate::diag::{At, SourceResult, StrResult};
|
||||
use crate::foundations::{repr, NativeElement, Packed, Repr, Type, Value};
|
||||
use crate::foundations::{array, repr, NativeElement, Packed, Repr, Str, Type, Value};
|
||||
use crate::syntax::{Span, Spanned};
|
||||
|
||||
#[rustfmt::skip]
|
||||
@ -182,6 +182,12 @@ impl IntoValue for Value {
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoValue for (&Str, &Value) {
|
||||
fn into_value(self) -> Value {
|
||||
Value::Array(array![self.0.clone(), self.1.clone()])
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: IntoValue + Clone> IntoValue for Cow<'_, T> {
|
||||
fn into_value(self) -> Value {
|
||||
self.into_owned().into_value()
|
||||
|
@ -195,6 +195,8 @@ For loops can iterate over a variety of collections:
|
||||
- `{for pair in dict {..}}` \
|
||||
Iterates over the key-value pairs of the [dictionary]($dictionary).
|
||||
The pairs can also be destructured by using `{for (key, value) in dict {..}}`.
|
||||
It is more efficient than `{for pair in dict.pairs() {..}}` because it doesn't
|
||||
create a temporary array of all key-value pairs.
|
||||
|
||||
- `{for letter in "abc" {..}}` \
|
||||
Iterates over the characters of the [string]($str). Technically, it iterates
|
||||
|
Loading…
x
Reference in New Issue
Block a user