我想弄清楚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)
具体来说,它如何知道映射desc
和method_options
调用哪种方法?
这是场景:
我有一个数百万长度为3-32的随机字符串数组,以及一个单词数组(字典).
我需要测试是否可以通过连接1,2或3个不同的字典单词来组成随机字符串.
由于字典单词有些固定,我可以对它们进行任何类型的预处理.
理想情况下,我想通过对字典进行某种预处理来优化查找速度.
我应该考虑采用哪种数据结构/算法来实现这一目标?
如果我递归通过.parentNode
of 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) 有时在我的模板中我想为某些CSS属性定义默认值,当这些值不作为渲染函数中的参数传递时,如下所示:
height: <%= if @height do %><%=@height%><% else %>"50px";<%end%>
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种更好(更简洁)的方式.
在灵药中,如果我在列表上操作,得到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语句(已被括号括起来)会产生意外输出?
看这个例子:
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时,如果变长则不会中断.
如何实现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) 我正在和 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,它在那里以这种方式工作)。