小编Dan*_*ton的帖子

实现DISTINCT以便理解

他的Coursera课程的倒数第二次讲座中,奥德斯基教授提供了以下for理解作为可爱案例研究的最后一步:

def solutions(target: Int): Stream[Path] =
  for {
    pathSet <- pathSets
    path <- pathSet
    if path.endState contains target
  } yield path
Run Code Online (Sandbox Code Playgroud)

在之前的一次演讲中,他在for理解和SQL 之间进行了一些类比.

我正在寻找的yield只是那些path拥有一个DISTINCT endState.

有没有办法从相同理解的过滤条款中回溯到已经产生的项目?

另一种方法可能是转换pathSetsMapendStatepath了之前for的语句,然后将其转换回一个Stream返回之前.但是,这似乎失去了使用a的懒惰计算好处Stream.

同一个案例研究的早期方法实现了类似的目标,但它已经是一个递归函数,而这个函数(似乎)不需要递归.

看起来我可以使用mutable Set来跟踪endState得到的s,但是感觉不满意,因为到目前为止该课程已成功避免使用可变性.

sql scala for-comprehension

18
推荐指数
1
解决办法
1236
查看次数

如何从.eex文件中调用函数

我正在努力学习凤凰城,并遇到了一个问题.在Rails我可以说

<%= Rails.version %>
Run Code Online (Sandbox Code Playgroud)

获取当前rails版本显示在.erb文件中.我在凤凰城询问了如何做到这一点,并得到了答案

:application.get_key(:phoenix, :vsn)
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我试图与凤凰城合作时,这突显了我的无知.当我放

<%= :application.get_key(:phoenix, :vsn) %>
Run Code Online (Sandbox Code Playgroud)

在我的.eex文件中,我明白了

no function clause matching in Phoenix.HTML.Safe.Tuple.to_iodata/1
Run Code Online (Sandbox Code Playgroud)

请指出任何帮助我学习下一步尝试的文档.谢谢!

tags elixir phoenix-framework

5
推荐指数
1
解决办法
395
查看次数

正则表达式在Ruby 2中略有不同?

我刚刚将Ruby 1.9.3中的一个小宝石移植到了漂亮的新Ruby 2.0.0上.我必须做的唯一改变是正则表达式.

在1.9.3下,以下正则表达式将匹配包含除数字,数字相关标点符号和空格(包括非中断空格)之外的字符的任何字符串.

/[^[[:space:]]\d\-,\.]/
Run Code Online (Sandbox Code Playgroud)

在2.0.0下,我不得不将Posix空间类从Negation类的开头移开.

/[^\d\-,\.[[:space:]]]/
Run Code Online (Sandbox Code Playgroud)

我没有发现我在评论的补丁说明中提到的这种变化.是否记录在任何地方?

ruby regex posix

4
推荐指数
1
解决办法
1190
查看次数

如何动态调用Elixir中的运算符

我工作过戴维的即将出版的新书在花好月圆我的方式,并且在一个锻炼,我想动态构造函数引用Kernel.+/2,Kernel.-/2等等,基于一个字符串的一个字符的内容'+','-'等等.

基于另一个SO问题,我希望能够调用apply/3传递内核,:+和这两个数字:

apply(Kernel, :+, [5, 7])
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为(如果我理解的话)Kernel.+/2是一个宏,而不是一个函数.我查找了源代码,并根据+其定义__op__,我可以从iex以下地址调用它:

__op__(:+, 5, 7)
Run Code Online (Sandbox Code Playgroud)

这有效,直到我将:+放入变量:

iex(17)> h = list_to_atom('+')
:+
iex(18)> __op__(h, 5, 7)
** (CompileError) iex:18: undefined function __op__/3
    src/elixir.erl:151: :elixir.quoted_to_erl/3
    src/elixir.erl:134: :elixir.eval_forms/4
Run Code Online (Sandbox Code Playgroud)

而且我猜测没有办法打电话__op__使用apply/3.

当然,蛮力方法可以完成工作.

  defp _fn(?+), do: &Kernel.+/2
  defp _fn(?-), do: &Kernel.-/2
  defp _fn(?*), do: &Kernel.*/2
# defp _fn(?/), do: &Kernel.//2   # Nope, guess again
  defp _fn(?/), do: &div/2        # …
Run Code Online (Sandbox Code Playgroud)

macros function dynamic elixir operator-keyword

3
推荐指数
1
解决办法
797
查看次数