Enum magnus::block::YieldValues
source · pub enum YieldValues<I> {
Iter(I),
Enumerator(Enumerator),
}
Expand description
Helper type for functions that either yield multiple values to a block or return an Enumerator.
I
must implement Iterator<Item = T>
, where T
implements ArgList
.
§Examples
use magnus::{
block::{block_given, YieldValues},
define_global_function, eval, method,
prelude::*,
rb_assert, RArray, Value,
};
fn count_to_3_abc(rb_self: Value) -> YieldValues<impl Iterator<Item = (u8, char)>> {
if block_given() {
YieldValues::Iter((1..=3).zip('a'..='c'))
} else {
YieldValues::Enumerator(rb_self.enumeratorize("count_to_3_abc", ()))
}
}
define_global_function("count_to_3_abc", method!(count_to_3_abc, 0));
// call Ruby method with a block.
let a = RArray::new();
rb_assert!("count_to_3_abc {|i, c| a << [i, c]} == nil", a);
rb_assert!(r#"a == [[1, "a"], [2, "b"], [3, "c"]]"#, a);
// call Ruby method without a block.
let enumerator: Value = eval("count_to_3_abc").unwrap();
rb_assert!(r#"enumerator.next == [1, "a"]"#, enumerator);
rb_assert!(r#"enumerator.next == [2, "b"]"#, enumerator);
Variants§
Auto Trait Implementations§
impl<I> Freeze for YieldValues<I>where
I: Freeze,
impl<I> RefUnwindSafe for YieldValues<I>where
I: RefUnwindSafe,
impl<I> Send for YieldValues<I>where
I: Send,
impl<I> Sync for YieldValues<I>where
I: Sync,
impl<I> Unpin for YieldValues<I>where
I: Unpin,
impl<I> UnwindSafe for YieldValues<I>where
I: UnwindSafe,
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