to: 値を消費しない変換
借用された値を受け取り、所有値を作成する関数に付ける接頭辞
// Copyright 2025 Google LLC // SPDX-License-Identifier: Apache-2.0 impl str { fn to_owned(&self) -> String; fn to_uppercase(&self) -> String; } impl u32 { // `u32` は `Copy` を実装しているため、`self` を値で受け取る fn to_be(self) -> u32; }
-
selfを消費せずに新しい所有値を作成し、型変換を意味するメソッドは、toで始まる名前にします。 -
toで始まるメソッドは別の型を返し、非自明な型変換、あるいはデータ変換であることを強く示唆します。たとえば、str::to_uppercaseです。 -
toメソッドは通常&selfを受け取ります。ただし、その型がCopyを実装している場合は、値としてselfを受け取ることもできます。これによって、その変換メソッド呼び出しでselfが消費されないことも保証されます。 -
単に
&selfを受け取り、同じ型の所有値を返すメソッドを定義したいだけなら、CloneまたはToOwnedを実装します。 -
元の値を消費するメソッドを定義したい場合は、
intoという命名パターンを使います。 -
また、プリミティブ型のエンディアンを変換する関数や、newtype の値をコピーして公開する関数でも見られます。
さらに考えてみよう
-
クラスへの質問:
to_ownedとinto_ownedの違いは何でしょうか?答え:
to_ownedは&strのような参照値に現れる一方で、into_ownedはCow(コピーオンライト)のように、参照型を保持する所有値に現れます。Cowのような型は、借用されている参照を含んでいても、それ自体は所有されていることがあります。そのため、Cowの所有値は、それが保持していた参照型の所有値を作成するために消費されます。