Elixir 使用变量结构

Elixir 使用变量结构,elixir,Elixir,我正试着写《干灵丹妙药》,戴夫·托马斯的书还在后边呢 下面是Phoenix控制器的一部分,它是为卡自动生成的。实际上,我有各种各样的产品,它们的性能与卡完全相同,因此我想概括一下。下面是我的一项工作,但它没有编译,错误在**{}** 我很确定我犯了一个根本性的错误,因为我对这门语言(但不是函数式编程)还不熟悉 如果您可以帮助我,请注意,我还需要将card\u path转换为变量,但我认为这将与estimate\u path product类似 我也尝试过,但也没有成功 (Struct, pa

我正试着写《干灵丹妙药》,戴夫·托马斯的书还在后边呢

下面是Phoenix控制器的一部分,它是为
卡自动生成的。实际上,我有各种各样的产品,它们的性能与
完全相同,因此我想概括一下。下面是我的一项工作,但它没有编译,错误在**{}**

我很确定我犯了一个根本性的错误,因为我对这门语言(但不是函数式编程)还不熟悉

如果您可以帮助我,请注意,我还需要将
card\u path
转换为变量,但我认为这将与
estimate\u path product
类似

我也尝试过,但也没有成功

  (Struct, path) =
    case product do
        "cards" -> (Card, card_path)
        _ -> (Card, card_path)
    end

如果要创建空结构(使用默认值),可以在模块上调用自动生成的
\uuuuuuuuu结构/0
函数

改变

changeset = map[product].changeset(%map[product]**{}**, card_params)

要在变量中存储
卡路径
函数,至少有2个选项:

  • 使用
    path=&card\u path/3
    存储对函数的引用,然后将其称为
    path。(conn,:show,card)

  • 将其存储为一个原子,如
    path=:card\u path
    并使用
    apply/3
    将其命名为:
    apply(YourApp.Router.Helpers,path,[conn,:show,card])


  • 谢谢第一点起作用了,我相信你对后者的看法也是正确的。为此,我使用的是Phoenix,它有
    resources”/estimates/:product“,EstimateController,除了:[:new,:edit]
    ,所以我想知道是否也有办法玩
    estimate\u path
    ,这是惯用的吗?我这样问,因为现在我看到我只能使用
    map
    如果它在
    create
    中,而我需要它用于其他功能,您应该使用模块属性来存储映射。在模块中使用
    @map%{…}
    定义它,然后在函数中使用
    @map
    访问它。第一个问题是,您可以创建一个类似
    @map%{“cards”=>%{module:Card,path::Card_path},…}
    的映射,然后使用
    :module
    中的值作为
    \uu结构
    ,和
    :带有
    应用的路径
    changeset = map[product].changeset(%map[product]**{}**, card_params)
    
    changeset = map[product].changeset(map[product].__struct__, card_params)