无法返回在函数中实现特征的结构(Mojolang)

问题描述 投票:0回答:1

我有这个代码:

trait State:

    fn to_string(self) -> String:
        ...

struct StateTtt(State):

    fn __init__(inout self):
        pass

    fn to_string(self) -> String:
        return "ABC"

fn get_state() -> State:
    return StateTtt()

fn main():
    var s = get_state()
    print(s.to_string())

但是它给了我错误:

“无法在返回值中将‘StateTtt’值隐式转换为‘State’”

但是 StateTtt 结构体实现了 State 特征,那么为什么它不能转换呢?

当然这是我的代码的简化版本。在实际代码中, getState 函数将根据参数创建一个结构体实例。

mojo mojolang
1个回答
0
投票

首先欢迎来到Mojo🔥!

特征 (

State
) 不是可返回类型,而是类型如何符合预期功能的预期实现的描述。您可以在这里阅读有关特征的更多信息: https://docs.modular.com/mojo/manual/traits

这是经过一些修改的代码示例:

trait State:
    fn to_string(self) -> String:
        ...

@value
struct StateTtt(State, Stringable):
    var some_state_data: Int

    fn __init__(inout self, some_state_data: Int = 0):
        self.some_state_data = some_state_data

    fn __str__(self) -> String:
        return "StateTtt(" + str(self.some_state_data) + ")"
    
    fn to_string(self) -> String:
        return str(self)

fn get_state() -> StateTtt:
    return StateTtt()

fn main():
    var s = get_state()
    print(s)

结果:

StateTtt(0)

请注意,

__str__
是已存在的
Stringable
特征的Mojo标准,它允许将结构体
str()
'转换为
String

由于您的代码示例没有列出

State
StateTtt
背后的完整概念,我不确定这个答案是否完全回答了“问题背后的问题”,可以这么说。但我希望我能让你朝着正确的方向前进!

值得注意的是:此答案是 Mojo nightly 版本 2024.5.1515 (077049dc) 的最新答案。该语言仍在不断发展;这篇文章和任何未来的读者之间可能会发生微妙的变化。

© www.soinside.com 2019 - 2024. All rights reserved.