我知道JavaScript函数可以接受"任意"数量的参数.
function f(){};
f(1,2,3,4 /*...*/);
Run Code Online (Sandbox Code Playgroud)
但我想知道实际上有多少"任何"可以限制?
比如说,让我说一百万个参数f().那会有用吗?或者翻译龙骨?
我猜测最大值是(a)特定于实现或(b)(2^32)-1,因为arguments对象是类似数组的.
我没有在语言规范中看到这一点,但我可能没有连接一些点.
我正在Ruby 1.9.2中编写一个定义了几个方法的模块.当调用这些方法中的任何一个时,我希望它们中的每一个首先执行某个语句.
module MyModule
def go_forth
a re-used statement
# code particular to this method follows ...
end
def and_multiply
a re-used statement
# then something completely different ...
end
end
Run Code Online (Sandbox Code Playgroud)
但我想避免a re-used statement在每个方法中明确地放置该代码.有办法吗?
(如果重要的话,a re-used statement每个方法在调用时都会打印自己的名字.它会通过一些变体来实现puts __method__.)
我正在为Mac OS X开发一个Electron应用程序.我试图在本地开发之前.app测试它的自动更新功能,然后将其捆绑为.
我有一个构建的应用程序的初始版本Foo.app,以及使用该模块.dmg和用作更新.我托管了这些文件.我已经验证他们安装并正确运行.我有一个在本地运行的Squirrel服务器,它将返回指向该服务器的正确JSON有效负载..zipelectron-builder.zip
为了在本地开发我的应用程序,我使用Webpack来转换我的Web资产,并使用electron@1.4.4在Electron中启动这些资产.换句话说,在本地开发时,我不会发布捆绑的.app; 我正在启动一个开发服务器并在Electron中提供这些资产.该过程类似于运行$ electron ..
在此行调用自动更新挂钩时会发生此问题:
autoUpdater.setFeedURL(feedURL)
Run Code Online (Sandbox Code Playgroud)
此行引发电子错误,表示:
"Could not get code signature for running application."
Run Code Online (Sandbox Code Playgroud)
好的,所以我进行搜索,看到有一些指南可以解释如何对应用程序进行编码签名:
但是,这些表明我应该编码签名.app.正如我所说,我试图测试自动更新,然后将其捆绑为.app.我不想一次又一次地重建,直到我自动更新正常工作.
所以我做了另一个搜索,看到有几个论坛问题与我要求的或多或少相同:
我无法通过挖掘这些线程来解决问题.我希望有人可以在捆绑之前给我一个明确的解决方案来签署Electron应用程序.
对于答案,我希望得到所有这些答案的明确答案:
.app?即,我将推出的文件$ electron .?我想update和delete使用视频的YouTube的API V3使用的OAuth2认证通过google-api-client (0.6.4)红宝石的宝石.但是,当我尝试执行这两个操作中的任何一个时,我看到以下错误消息:
Google::APIClient::ClientError: Insufficient Permission
Run Code Online (Sandbox Code Playgroud)
下面是奇怪的事情:使用完全相同的认证过程与update和delete,我可以insert(上载)成功,没问题!所以,我不认为这是我的身份验证设置的问题,但我的代码中的其他地方.
scope在任何这些操作中,我的读写总是相同的:
https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload
Run Code Online (Sandbox Code Playgroud)
并根据API文档,该空间分隔组作用域应包括insert,update和delete行动.
我client_id,client_secret,refresh_token始终是所有这些行动也一样-所以,这不能成为问题,或者,可以吗?请注意,我的程序access_token在到期时会自动获取新内容,因此,我不相信这就是问题所在.
为了比较,这是我的insert(上传)代码的样子(这是有效的):
# Auth stuff, then...
@client.execute!(
:api_method => @youtube.videos.insert,
:body_object => body,
:media => Google::APIClient::UploadIO.new(file_path, 'video/*'),
:parameters => {
'uploadType' => 'multipart',
:part => body.keys.join(','),
}
)
Run Code Online (Sandbox Code Playgroud)
这是我的delete代码看起来像(这失败): …
我已将一组.rb文件放在一个目录中modules/。每个文件都包含一个模块。我正在从一个单独的脚本加载所有这些文件:
Dir["modules/*.rb"].each {|file| load file }
Run Code Online (Sandbox Code Playgroud)
但接下来我必须将它们一一包含在内,明确列出并命名它们:
class Foo
include ModuleA
include ModuleB
# ... and so on.
end
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一些非显式的单行代码可以完成此任务,la(伪代码)......
class Foo
for each loaded file
include the module(s) within that file
end
# ... other stuff.
end
Run Code Online (Sandbox Code Playgroud)
我考虑过实际读取文件的内容,搜索字符串“ module”,然后提取模块名称,并以某种方式include基于此进行操作 - 但这似乎很荒谬。
我正在尝试做的事情是可取的和/或可能的吗?
假设我们正在编写一个平滑动画至关重要的浏览器应用程序.我们知道垃圾收集可以阻止执行足够长的时间以引起可察觉的冻结,因此我们需要最小化我们创建的垃圾量.为了最大限度地减少垃圾,我们需要在主动画循环运行时避免内存分配.
但是执行路径遍布循环:
var i = things.length; while (i--) { /* stuff */ }
for (var i = 0, len = things.length; i < len; i++) { /* stuff */ }
Run Code Online (Sandbox Code Playgroud)
并且他们的var语句分配内存可以分配垃圾收集器可能删除的内存,我们要避免.
那么,在JavaScript中编写循环结构以避免每个都分配内存的好策略是什么?我正在寻找一个通用的解决方案,列出了利弊.
以下是我提出的三个想法:
我们可以声明app.i并app.length在顶部,并一次又一次地重复使用它们:
app.i = things.length; while (app.i--) { /* stuff */ }
for (app.i = 0; app.i < app.length; app.i++) { /* stuff */ }
Run Code Online (Sandbox Code Playgroud)
优点:简单到实现.缺点:取消引用属性所带来的性能可能意味着Pyrrhic的胜利.可能会意外误用/破坏属性并导致错误.
我们可以保证数组具有一定数量的元素.如果我们事先知道长度是多少,我们可以在程序中手动解开循环:
doSomethingWithThing(things[0]); …Run Code Online (Sandbox Code Playgroud) 当我运行下面的JavaScript/WebGL代码(请向下滚动)时,我在开发控制台中看到以下警告消息:
[.WebGLRenderingContext]
PERFORMANCE WARNING: Attribute 0 is disabled.
This has significant performance penalty
Run Code Online (Sandbox Code Playgroud)
下面的代码在画布上成功绘制了一个白点.但是,我希望警告消失.我需要在下面的代码中更改什么才能使其停止显示?
HTML:
<!DOCTYPE html>
<html>
<body>
<canvas id="canvas" width="100" height="100"></canvas>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
JavaScript:
var
VERTEX_SHADER_SOURCE = ""+
"void main() {"+
" gl_Position = vec4(0.0, 0.0, 0.0, 1.0);"+
" gl_PointSize = 10.0;"+
"}",
FRAGMENT_SHADER_SOURCE = ""+
"void main() {"+
" gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);"+
"}",
canvas = document.getElementById('canvas'),
gl = canvas.getContext('webgl'),
vertexShader = gl.createShader(gl.VERTEX_SHADER),
fragmentShader = gl.createShader(gl.FRAGMENT_SHADER),
shaderProgram = gl.createProgram();
// Compile the shaders. …Run Code Online (Sandbox Code Playgroud) 我有一个父母在内存中<div>有一个孩子<div>- 没有附在当前文件上.我想CustomEvent在孩子身上触发一个,但是从父母那里听那个事件.这是我的代码:
var parent = document.createElement('div');
var child = document.createElement('div');
parent.appendChild(child);
parent.addEventListener('boom', function(event) {
console.log('parent listener', event); // <~ This never runs!
});
var event = new CustomEvent('boom', { bubbles: true });
child.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)
此代码无法按预期工作.父节点上的事件侦听器永远不会触发.这似乎与JavaScript事件系统相矛盾,因为事件从目标中冒出来.但是,如果我将此代码段的最后两行修改为以下内容,则回调会像我期望的那样触发:
document.body.appendChild(parent);
child.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)
换句话说,如果我在调度事件之前将我的片段作为文档的子树附加,那么父事件侦听器将按预期完全触发.为什么?有没有办法在使用分离的DOM元素时允许冒泡?
在 SVG 中,您可以使用 URL 引用(例如 )url(#id)来指向网页上的其他 SVG 元素。例如:
<use filter="url(#my-filter)" ...></use>
Run Code Online (Sandbox Code Playgroud)
但假设,意外地,我最终遇到了这样的命名冲突:
<svg>
<defs>
<filter id="my-filter" x="30">
</defs>
<use filter="url(#my-filter)"></use>
</svg>
<!-- somewhere else on my page --->
<svg>
<defs>
<filter id="my-filter" x="40">
</defs>
<use filter="url(#my-filter)"></use>
</svg>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些url()参考文献似乎没有限定范围。当此页面显示时,它们都将使用相同的过滤器——大概是与选择器匹配的第一个元素#my-filter(而不是位于每个元素的上下文<filter>中)。<svg>
是否有某种方法可以添加范围,以便每个引用都指向预期位置?或者我只需要确保这些 id 在我的网页上始终是全局唯一的?
我有一个300K字符串的数组,代表日期:
date_array = [
"2007-03-25 14:24:29",
"2007-03-25 14:27:00",
...
]
Run Code Online (Sandbox Code Playgroud)
我需要计算此数组中每个日期的出现次数(例如,"2011-03-25"的所有日期字符串).确切的时间无关紧要 - 只是日期.我知道文件中的日期范围.所以我有:
Date.parse('2007-03-23').upto Date.parse('2011-10-06') do |date_to_count|
count = 0
date_array.each do |date_string|
if Date.parse(date_string) >= date_to_count &&
Date.parse(date_string) <= date_to_count
count += 1
end
end
puts "#{date_to_count} occurred #{count} times."
end
Run Code Online (Sandbox Code Playgroud)
在我的机器上计算仅一个日期的出现时间超过60秒.我可以通过哪些方式优化此任务的性能?
可能有用的注释:我使用的是Ruby 1.9.2.此脚本使用rake 0.9.2在Rake任务中运行.它date_array是从CSV文件加载的.在每次迭代中,它count都保存为我的Rails项目数据库中的记录.
在我的Rails应用程序中,我有一些我想要放入的视图(布局,部分)vendor/views而vendor/views/layouts不是app/views.但是,它是由只有导游(与基地项目结构)暗示assets,并plugins放入vendor.不过,我可以这样做吗?
我正在尝试创建简单的Cabal可执行包.
该惊天动地用户指南的'运行可执行程序’一节说:
您可以使用run命令构建Cabal并运行可执行文件.
Run Code Online (Sandbox Code Playgroud)cabal run EXECUTABLE [-- EXECUTABLE_FLAGS]
然而,当我输入该命令时:
$ cabal run HelloWorld
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
cabal: unrecognised command: run (try --help)
Run Code Online (Sandbox Code Playgroud)
cabal --help告诉我,确实没有run命令.
我错过了什么吗?如何运行我的可执行文件?
我是Haskell和Cabal的新手; 请告诉我这里包含哪些信息会有所帮助.
我在Mac OS X 10.8.5上.
cabal --version 得到:
cabal-install version 0.14.0
using version 1.14.0 of the Cabal library
Run Code Online (Sandbox Code Playgroud)
ghc --version 得到:
The Glorious Glasgow Haskell Compilation System, version 7.4.2
Run Code Online (Sandbox Code Playgroud) 我收到一个我不明白的编译错误。我确信这段代码应该可以工作,但无法编译。我只是忘记了一些明显的事情吗?这是我的代码和错误消息:
using System.Collections.Generic;
using System.Linq;
public class A { }
public class B : A { }
public class C : A { }
public static class Foo
{
public static List<A> All = new List<A>
{
new A(),
new B(),
new C()
};
public static List<B> Bs()
{
/*
The error is given here:
(field) static List<A> Foo.All
'List<A>' does not contain a definition for 'ToList' and
the best extension method overload 'Enumerable.ToList<B>(IEnumerable<B>)'
requires a receiver of type 'IEnumerable<B>' …Run Code Online (Sandbox Code Playgroud)