当前位置:  开发笔记 > 编程语言 > 正文

片段重用

如何解决《片段重用》经验,为你挑选了1个好方法。

是否有可能重用碎片?

在这样的例子中

def unpublished_by_title(title) do
  from p in Post,
    where: is_nil(p.published_at) and
           fragment("downcase(?)", p.title) == ^title
end

看起来能够将片段部分提取到单独的函数中以便在其他地方重用它会非常方便,例如:

def unpublished_by_title(title) do
  from p in Post,
    where: is_nil(p.published_at) and
           downcase(p.title) == ^title
end

def downcase(title) do
  fragment("downcase(?)", ^title)
end

然而,在尝试了许多不同的变化之后,由于宏扩展或类似的东西,它似乎不起作用.有任何想法吗?



1> michalmuskal..:

你是对的,查询是在编译时编写的.因此,如果要扩展查询语法,则需要定义宏而不是常规函数.

像下面这样的东西应该做的伎俩:

defmacro downcase(field) do
  quote do
    fragment("downcase(?)", unquote(field))
  end
end

请记住,在使用之前需要定义宏.


@ave非常适合我.您是否确定宏已定义_above_使用它的函数?
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有