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