如何定义一对在Javascript中相互调用的函数,以便JS-lint不会抱怨在定义之前使用'factorial'?
function factorial1(n) { return factorial(n); }
function factorial(n) { return n === 0 ? 1 : n * factorial1(n - 1); }
Run Code Online (Sandbox Code Playgroud)
似乎没有满足JSlint的有效排序.(一个可以嵌入另一个,但这对于所有相互调用的函数集合来说都是一场噩梦).
当然这是由语言处理的吗?这只是JSlint中的一个错误吗?(这个问题肯定已在某个地方得到解答,但我找不到了!)
使用情况末尾添加
我经常想对像列表这样的抽象对象进行操作。例如
def list_ish(thing):
for i in xrange(0,len(thing)):
print thing[i]
Run Code Online (Sandbox Code Playgroud)
现在,如果thing是一个列表,这将是适当的,但是如果thing是一个dict,则将失败。pythonic为什么问“你的行为像列表吗?”
注意:
hasattr('__getitem__') and not hasattr('keys')
Run Code Online (Sandbox Code Playgroud)
这将适用于所有我能想到的情况,但是我不喜欢否定地定义鸭子类型,因为我希望在某些情况下它不会被捕获。
我真正要问的是
“嘿,您以我期望列表执行的方式操作整数索引吗?” 例如
thing[i], thing[4:7] = [...], etc.
Run Code Online (Sandbox Code Playgroud)
注意:我不想简单地在大型try / except内部执行我的操作,因为它们具有破坏性。在这里尝试失败不是很酷。
使用上下文-“点列表”是一个类似列表的事物,其中包含类似dict的事物作为其元素。-“矩阵”是一个类似列表的事物,其中包含类似列表的事物
-我有一个函数库,可以在点列表上运行,也可以类似地在矩阵之类的东西上运行。
-例如,从用户的角度来看,破坏性操作(例如“类似电子表格”的操作“ column-slice”)可以类似的方式在矩阵对象和点列表对象上进行操作-生成的结果类似于原始列,但只有指定的列。
-因为此特定操作具有破坏性,所以好像对象是矩阵一样进行操作,只是通过操作找出部分方式,这并不是一件很酷的事情,它实际上是一个点列表或不在列表中。
-我希望我的'is_matrix'和'is_point_list'测试是高性能的,因为它们有时会在内部循环中发生。因此,我对仅调查元素零的测试感到满意。
-我更喜欢不涉及构造临时对象的测试,仅用于确定对象的类型,但这也许不是python方式。
总的来说,我发现整只鸭子打字的东西有点混乱,并且充满了错误和缓慢,但是也许我还没有像真正的Pythonista那样思考
乐于喝更多的助眠药...
我正在尝试使用第104集(以及网络上的许多其他地方)中所述的Ryan Bates的“ letter-opener” gem。在我发现的每个实例中,似乎用户只是在将他们包含在自己的Gem文件中,传统的红宝石宝石gemsource。当我尝试这样做时,rails找不到宝石。我一定做错了什么,但是呢?
source "http://rubygems.org"
...
gem "letter-opener", group: :development
Run Code Online (Sandbox Code Playgroud)
然后我输入
$ bundle install
Run Code Online (Sandbox Code Playgroud)
并且我收到以下消息:
正在获取http://rubygems.org/的源索引, 在您的Gemfile中列出的任何gem来源中都找不到gem'letter-opener(> = 0)x86-mingw32'。
谢谢您的帮助!