Skip to main content
Log in

Mojo trait

Copyable

The Copyable trait denotes a type whose value can be copied.

Example implementing the Copyable trait on Foo which requires the __copyinit__ method:

struct Foo(Copyable):
var s: String

fn __init__(inout self, s: String):
self.s = s

fn __copyinit__(inout self, other: Self):
print("copying value")
self.s = other.s
struct Foo(Copyable):
var s: String

fn __init__(inout self, s: String):
self.s = s

fn __copyinit__(inout self, other: Self):
print("copying value")
self.s = other.s

You can now copy objects inside a generic function:

fn copy_return[T: Copyable](foo: T) -> T:
var copy = foo
return copy

var foo = Foo("test")
var res = copy_return(foo)
fn copy_return[T: Copyable](foo: T) -> T:
var copy = foo
return copy

var foo = Foo("test")
var res = copy_return(foo)
copying value
copying value

Implemented traits

AnyType

Methods

__copyinit__

__copyinit__(inout self: T, existing: T, /)

Create a new instance of the value by copying an existing one.

Args:

  • existing (T): The value to copy.

Was this page helpful?