我在GitHub中查看Backbone-requireJS样板,我看到了两种不同类型的实现.
https://github.com/david0178418/BackboneJS-AMD-Boilerplate/blob/master/src/js/views/viewStub.js具有以下作为viewStub:
function() {
"use strict";
define([
'jqueryLoader',
'underscore',
'backbone',
],
function($, _, Backbone) {
return Backbone.View.extend({
template : _.template(/*loaded template*/),
initialize : function() {
this.render();
},
render : function() {
$(this.el).append(this.template(/*model/collection*/));
return this;
}
});
}
);
})();
Run Code Online (Sandbox Code Playgroud)
而来自其他样板的视图存根 https://github.com/jcreamer898/RequireJS-Backbone-Starter/blob/master/js/views/view.js具有以下内容:
define([
'jquery',
'backbone',
'underscore',
'models/model',
'text!templates/main.html'],
function($, Backbone, _, model, template){
var View = Backbone.View.extend({
el: '#main',
initialize: function(){
this.model = new model({
message: 'Hello World'
});
this.template = _.template( template, { model: this.model.toJSON() } );
}, …Run Code Online (Sandbox Code Playgroud) 我尝试使用nsIProcess执行.exe文件.但它没有工作,也没有给出任何错误信息.我正在使用firefox 10和Windows 7.任何人都可以建议我解决方案吗?谢谢
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIProcess);
file.initWithPath("C:\\Users\MJ\\Desktop\\Example.FaceDetection.exe");
file.launch();
Run Code Online (Sandbox Code Playgroud) 我遇到过一种模式,我从种子值开始,x在每一步生成一个新的种子值和一个要输出的值.我想要的最终结果是输出值列表.这可以用以下函数表示:
my_iter :: (a -> (a, b)) -> a -> [b]
my_iter f x = y : my_iter f x'
where (x',y) = f x
Run Code Online (Sandbox Code Playgroud)
一个人为的例子就是生成Fibonacci数:
fibs:: [Integer]
fibs = my_iter (\(a,b) -> let c = a+b in ((b, c), c)) (0,1)
-- [1, 2, 3, 5, 8...
Run Code Online (Sandbox Code Playgroud)
我的问题是,我有这种感觉,很可能有更惯用的方式来做这种事情.我的功能的惯用替代方案是什么?
我现在唯一能想到的就是iterate前奏,但它们有一些缺点.
一种方法是先迭代然后映射
my_iter f x = map f2 $ iterate f1 x
where f1 = fst . f
f2 = snd . f
Run Code Online (Sandbox Code Playgroud)
但是,如果没有自然的方法将f分成单独的f1和f2函数,这看起来很难看.(在人为的Fibonacci案例中,这很容易做到,但是在某些情况下,生成的值不是种子的"独立"函数,因此分割事物并不那么简单)
另一种方法是将"输出"值与种子一起元组化,并使用单独的步骤将它们分开(有点像"Schwartzian变换"用于排序事物):
my_iter f …Run Code Online (Sandbox Code Playgroud) 我想在我的Linux计算机上安装Lua 5.2和5.1.这只是用通常安装每个版本的问题make linux install还是还有别的东西?特别是,我担心头文件和库文件,因为这些文件似乎是在没有使用版本号命名空间的目录上,例如/ usr/local/include.
除此之外,是否可以设置Luarocks以便它可以安装5.1和5.2库?我知道Luarocks将命名空间放在5.2或5.1目录中,设置LUA_PATH_5_X和LUA_CPATH_5_X变量应该可以用于配置Lua,但我不明白Luarocks如何决定编译C库的Lua版本.
我有一些代码想要从函数中获取一些额外的返回值,然后将它们向前传递:
local ok, ... = coroutine.resume(co)
do_stuff(ok)
return ...
Run Code Online (Sandbox Code Playgroud)
但是,由于...变量赋值是语法错误,因此不会运行.
我可以通过使用旧的"函数参数和变量是等效的"技巧和一个立即调用的函数来解决这个限制
return (function(ok, ...)
do_stuff(ok)
return ...
)(coroutine.resume(co))
Run Code Online (Sandbox Code Playgroud)
但我想这样做不会非常惯用或有效率.有没有更合理的方法来解决处理resume呼叫返回的剩余值的问题?
编辑:顺便说一下,这需要使用nil额外参数中的值
EDIT2:看起来像使用立即调用的函数一直是最好的方法.
如果我使用“传统”Javascript 类创建 Foo 类,则在控制台上打印 Foo 实例时,chrome 和 Firefox 都会显示 Foo 名称:
function Foo(){
this.x = 10;
}
console.log(new Foo());
// Foo {x: 10}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我使用手工滚动原型继承,那么在调试时我不会得到有用的名称
function mkClass(init, proto){
return function(/**/){
var obj = Object.create(proto);
init.apply(obj, arguments);
return obj;
}
}
var Bar = mkClass(function(){ this.x = 10 }, {});
console.log(Bar());
// Object {x: 10}
Run Code Online (Sandbox Code Playgroud)
有没有办法让通过我的原型系统创建的类在控制台上打印时显示它们的名称?到目前为止,我能想到的唯一方法是一个丑陋的黑客滥用 eval 为 mkClass 返回的当前匿名构造函数提供不同的名称。
我有一个 Lua 函数,它返回false后跟错误消息,并希望使用已损坏的测试框架来测试其行为。现在我正在这样做:
function safe_divide(a, b)
if b > 0 then -- buggy! should be b ~= 0
return a / b
else
return false, "division by zero"
end
end
describe("safe_divide", function()
it("can divide by positive numbers", function()
local ok, err = safe_divide(10.0, 5.0)
assert.truthy(ok)
assert.are.same(2.0, ok)
end)
it("errors when dividing by zero", function()
local ok, err = safe_divide(10.0, 0.0)
assert.not_truthy(ok)
assert.are.same("division by zero", err)
end)
it("can divide by negative numbers", function()
local ok, err = …Run Code Online (Sandbox Code Playgroud) 我试图按年龄对一系列记录进行冒泡,但我得到的只是:
[object Object],[object Object],[object Object]
如何让它显示记录的值?
students = [
{name: "timothy", age: "9"},
{name: "claire", age: "12"},
{name: "michael", age: "20"}
];
for (var i = 0; i < students.length; i++) {
for (var j = i + 1; j < students.length; j++) {
if (Number(students[i].age) > Number(students[j].age)) {
tempValue = students[j].age;
students[j].age = students[i].age;
students[i].age = tempValue;
}
}
}
alert(students);
Run Code Online (Sandbox Code Playgroud) 经过一段时间的Javascript编程后,我对对象和关联数组(字典)之间的二元性有了一点喜欢:
//Javascript
var stuff = { a: 17, b: 42 };
stuff.a; //direct access (good sugar for basic use)
stuff['a']; //key based access (good for flexibility and for foreach loops)
Run Code Online (Sandbox Code Playgroud)
在python中基本上有两种方法可以做这种事情(据我所知)
字典:
stuff = { 'a': 17, 'b':42 };
# no direct access :(
stuff['a'] #key based access
Run Code Online (Sandbox Code Playgroud)
或对象:
#use a dummy class since instantiating object does not let me set things
class O(object):
pass
stuff = O()
stuff.a = 17
stuff.a = 42
stuff.a #direct access :)
getattr(stuff, 'a') …Run Code Online (Sandbox Code Playgroud) 可以使用let rec创建无限的循环列表,而无需求助于可变引用:
let rec xs = 1 :: 0 :: xs ;;
Run Code Online (Sandbox Code Playgroud)
但是我可以使用相同的技术来编写一个接收有限列表并返回其无限循环版本的函数吗?我尝试写作
let rec cycle xs =
let rec result = go xs and
go = function
| [] -> result
| (y::ys) -> y :: go ys in
result
;;
Run Code Online (Sandbox Code Playgroud)
但是出现了以下错误
错误:不允许这种表达式作为`let rec'的右侧
javascript ×4
lua ×3
backbone.js ×1
dictionary ×1
eval ×1
firefox ×1
haskell ×1
letrec ×1
lua-busted ×1
luarocks ×1
object ×1
ocaml ×1
python ×1
requirejs ×1