小编Dog*_*ert的帖子

在Ruby中编写像Thor gem一样的DSL?

我想弄清楚Thor宝石是如何创建这样的DSL的(第一个例子来自他们的自述文件)

class App < Thor                                                 # [1]
  map "-L" => :list                                              # [2]

  desc "install APP_NAME", "install one of the available apps"   # [3]
  method_options :force => :boolean, :alias => :string           # [4]
  def install(name)
    user_alias = options[:alias]
    if options.force?
      # do something
    end
    # other code
  end

  desc "list [SEARCH]", "list all of the available apps, limited by SEARCH"
  def list(search="")
    # list everything
  end
end
Run Code Online (Sandbox Code Playgroud)

具体来说,它如何知道映射descmethod_options调用哪种方法?

ruby dsl thor

2
推荐指数
1
解决办法
662
查看次数

检查单词是否由一个或多个连接的字典单词组成

这是场景:

我有一个数百万长度为3-32的随机字符串数组,以及一个单词数组(字典).

我需要测试是否可以通过连接1,2或3个不同的字典单词来组成随机字符串.

由于字典单词有些固定,我可以对它们进行任何类型的预处理.

理想情况下,我想通过对字典进行某种预处理来优化查找速度.

我应该考虑采用哪种数据结构/算法来实现这一目标?

language-agnostic algorithm data-structures

2
推荐指数
1
解决办法
1552
查看次数

在JavaScript中的“click”等事件回调中,“event.target”是否保证是/等于“this”的后代?

如果我递归通过.parentNodeof event.target,我能保证到达吗this?规范中是否提到了这一点?

下面是一些代码来演示这一点,它将记录 ifevent.target是 的后代this

http://jsfiddle.net/Dogbert/aRLrG/

var isADescendentOf = function (child, parent) {
    if (child === parent) {
        return true;
    }
    if (child === null) {
        return false;
    }
    return isADescendentOf(child.parentNode, parent);
};


var nodes = document.querySelectorAll("*");

for (var i = 0; i < nodes.length; i++) {
    nodes[i].addEventListener("click", function (event) {
        console.log(isADescendentOf(event.target, this));
    });
}
Run Code Online (Sandbox Code Playgroud)

超文本标记语言

<div id="a">A
    <div id="b">B
        <div id="c">C
            <div id="d">D
                <div id="e">E</div> <span id="f">F</span>

                <button>B</button> <span>1<span>2<span>3
                </span></span> …
Run Code Online (Sandbox Code Playgroud)

javascript dom dom-events

2
推荐指数
1
解决办法
312
查看次数

在模板中传递默认参数的最佳方法

有时在我的模板中我想为某些CSS属性定义默认值,当这些值不作为渲染函数中的参数传递时,如下所示:

height: <%= if @height do %><%=@height%><% else %>"50px";<%end%>
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种更好(更简洁)的方式.

elixir phoenix-framework

2
推荐指数
1
解决办法
344
查看次数

为什么我不能在elixir的filter函数中使用or语句?

在灵药中,如果我在列表上操作,得到3的倍数:

1..10 |> Enum.filter(fn(x) -> (rem(x,3) == 0) end)
Run Code Online (Sandbox Code Playgroud)

输出: [3, 6, 9]


好像我添加一个或声明的地方:

1..10 |> Enum.filter(fn(x) -> (rem(x,3) == 0 || rem(x,5)) end)
Run Code Online (Sandbox Code Playgroud)

输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


为什么or语句(已被括号括起来)会产生意外输出?

elixir

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

为什么Elixir Regexes在达到一定长度时会破裂?

看这个例子:

str = "aaaaaaaaaaaaaaaaaaaaaa"
Regex.match? ~r/a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaaaaaaaa/, str
#=> true
Regex.match? ~r/a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaaaaaaaa/, str
#=> false
Run Code Online (Sandbox Code Playgroud)

请注意str,只有当我a?向正则表达式添加更多s时,如果变长则不会中断.

regex erlang elixir

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

是否相当于Ruby Enumerable#one?枚举#没有?在Elixir?

如何实现one?none?在药剂的有效途径?

你觉得这个怎么样?

defmodule MyEnum do
  def one?(enum, fun) do
    Enum.count(enum, fun) == 1 && true || false
  end

  def none?(enum, fun) do
    Enum.count(enum, fun) == 0 && true || false
  end
end
Run Code Online (Sandbox Code Playgroud)

用法示例:

iex(6)> MyEnum.none?([0,0,0,0], fn(x) -> x == 1 end)
true
iex(7)> MyEnum.none?([0,0,1,0], fn(x) -> x == 1 end)
false
iex(8)> MyEnum.none?([0,1,1,0], fn(x) -> x == 1 end)
false
iex(9)> MyEnum.one?([0,1,1,0], fn(x) -> x == 1 end)
false
iex(10)> MyEnum.one?([0,1,0,0], fn(x) -> x == 1 …
Run Code Online (Sandbox Code Playgroud)

enums elixir

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

从 Elixir 的视图中调用渲染部分

我正在和 Phoenix 一起学习 Elixir,但陷入了一个相当愚蠢的境地。我想通过以下方式从索引模板内部调用部分的渲染:

#index.html.slim

- for element_here  <- array_here do
  = render MyApp.SharedView, "_game.html.slim", element: element_here
Run Code Online (Sandbox Code Playgroud)

为此,我创建了一个名为 shared_view.ex 的视图,如下所示:

defmodule MyApp.SharedView do
  use MyApp.Web, :view
  def render("game", _assigns), do: "/shared/_game.html.slim"
end
Run Code Online (Sandbox Code Playgroud)

我预计它会经历循环渲染共享/_game.html.slim,我将其复制到此处:

.col-md-4.portfolio-item
  a href="#"
    img.img-responsive alt="" src="http://placehold.it/700x400" /
  h3
    a href="#"  Project Name
  p Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae.
Run Code Online (Sandbox Code Playgroud)

但没有任何内容被渲染。我也没有收到错误。它只是渲染之前和之后的内容。

我不确定我在这里缺少什么。没有路线或控制器操作连接到“_game”部分,因为我认为它没有必要(我习惯了 Rails,它在那里以这种方式工作)。

rendering elixir phoenix-framework

0
推荐指数
1
解决办法
1176
查看次数