首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Elixir中定义sigils的语法不使用"defsigil"?

为什么在Elixir中定义sigils的语法不使用"defsigil"?
EN

Stack Overflow用户
提问于 2015-06-01 09:54:18
回答 2查看 370关注 0票数 1

我在读关于西格利兹的页面教程。

我希望定义sigils的语法使用"defsigil“,就像"defstruct”、"defprotocol“等等。

但事实并非如此。

为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-01 15:07:12

最初的sigil语法是def __s__,其中s是用于sigil的字符(现在是def sigil_s)。您可以在开始处理sigils的初始提交中看到这一点。我相信这项工作是在宏实现之前就开始的。

这个语法需要一个hack来允许导入它们,您可以在这个问题。中看到这些信息。

今天,当有人写%f"foo“时,它会翻译为f("foo",[])。这个建议是将翻译改为: sigil_f("foo",[])。 这一变化带来两个好处: ( 1)姓名更为明确; 2)它允许我们移除我们进口商的一次黑客攻击。今天,导入Hello带来了所有的函数,这些函数不以下划线开头,但它为sigils做了一个例外;

您可以在讨论中看到一些其他建议,如defmodule Sigil.s,但是最终选择了def sigil_s语法。

实现这些更改的实际提交是https://github.com/elixir-lang/elixir/commit/c6284557e792efd67f13f421b723a7a301bdbb93

我不知道为什么不是defsigil,也许没人建议这么做?这是我最好的猜测,因为在写这篇文章的时候,在谷歌上搜索"defsigil“只会返回这个问题。如果在GitHub或IRC上提到它,那么搜索结果中就会提到它。

票数 3
EN

Stack Overflow用户

发布于 2015-06-01 10:25:18

Sigils只是调用特定方法的一种奇特方式。看一看关于自订印钞的部分。基本上,~x/things/optionssigil_x(things, options)是一样的。所以你可以写这样的东西:

代码语言:javascript
复制
defmodule Thing do
  def sigil_u(string, _options) do
    string |> String.upcase
  end

  def test do
    ~u/bob/
  end
end

IO.inspect Thing.test
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30570461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档