Skip to main content

Key

Struct Key 

Source
pub struct Key { /* private fields */ }
Expand description

A value used as a dict key or a set member.

Two jobs. It carries the hash, computed once when the key was made, because a dict asks for it on every lookup and a big tuple would otherwise walk itself each time. And it gives Rust’s Hash and Eq Python’s meaning rather than the derived one, so 1, 1.0 and True are one key.

Making one is where an unhashable value is caught, so a Key that exists is a value that had a hash at the time it was made. Nothing here can change afterwards, since the only mutable object in the object model is a list and a list has no hash.

Implementations§

Source§

impl Key

Source

pub fn new(object: Object) -> Result<Self, Unhashable>

Takes a value as a key.

§Errors

The value has no hash, so it cannot be one.

Source

pub const fn object(&self) -> &Object

The value itself, which is what iterating a dict hands back.

Source

pub fn into_object(self) -> Object

The value, giving up the key.

Source

pub const fn hash(&self) -> i64

The hash, computed when this was made.

Trait Implementations§

Source§

impl Clone for Key

Source§

fn clone(&self) -> Key

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Key

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for Key

Source§

impl FromIterator<Key> for Set

Source§

fn from_iter<I: IntoIterator<Item = Key>>(values: I) -> Self

Creates a value from an iterator. Read more
Source§

impl Hash for Key

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Key

Source§

fn eq(&self, other: &Self) -> bool

What a dict lookup asks, which is not quite ==.

Identity comes first, and that is the whole reason a NaN can be used as a dict key and found again. x == x is false for one, so a lookup that only asked == would store it and then never find it.

1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Key

§

impl !Send for Key

§

impl !Sync for Key

§

impl !UnwindSafe for Key

§

impl Freeze for Key

§

impl Unpin for Key

§

impl UnsafeUnpin for Key

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.