我的Web应用程序使用document.createEvent和event.initEvent创建泛型类型的自定义事件Event.
我想知道这是否被视为良好做法.在这方面,我可以利用已经存在的DOM事件系统,而不必发明和实现我自己的; 另一方面,这可能导致名称冲突,以防未来的标准化事件模型定义具有我选择的名称的事件类型.(或者是否可以命名事件类型?)
我问,因为我刚刚通过浏览stackoverflow了解到将自定义属性放在DOM对象或内置Javascript对象上被认为是不好的做法.
编辑 我想我已经找到了: http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-CustomEvent
所以让我重新解释一下我的问题:我是否正确理解了引用的部分,因为建议CustomEvent在Web应用程序中实际使用它?
添加警告
我刚刚注意到CustomEvent6.之前的Firefox版本不支持它.但是当前基于Webkit的浏览器支持它.
我想在GWT 2.0中通过UiBinder使用声明方法实现菜单(MenuBar,MenuItem).
我遇到了两个问题:
有没有办法在.ui.xml文件中添加MenuItemSeparators?到目前为止,我只设法将MenuBar-和MenuItem-tags放入文件中.
使用@UiHandler,GWT为我编写事件处理程序的样板代码.对于菜单,我需要编写命令.我怎么能用UiBinder方法做到这一点?是否有一个命令标记放在.ui.xml文件中?我是否必须自己编写命令处理程序的样板代码?
感谢您思考这些问题!
我已经阅读了以下配方,其中显示了使用Google Cloud Endpoints后端为AngularJS前端提供支持的方法:
我不明白的是AngularJS和Cloud Endpoints初始化的附录.相关部分如下:
附录:关于AngularJS + Cloud端点初始化的提示提示#1:注意初始化序列
留言簿应用程序按以下顺序加载三个不同的JS库:
- AngularJS
- 留言簿应用程序
- Google API客户端,包含端点功能
为了遵循这个顺序,index.html在
<script>标记中包含以下 标记,<head>用于加载每个JS库:Run Code Online (Sandbox Code Playgroud)<script src="js/angular.min.js"></script> <script src="js/guestbook.js"></script> <script src="https://apis.google.com/js/client.js?onload=init"></script>加载后,第三个库(Google API客户端)调用其"onload"参数指定的初始化函数.在这种情况下,期望并调用init()函数.提示#2:尽快进入AngularJS世界
在初始化序列中,我们使用两个函数:
Run Code Online (Sandbox Code Playgroud)init() function window.init() function这个init()函数在guestbook.js中以下列方式定义:
Run Code Online (Sandbox Code Playgroud)function init() { window.init(); }正如您可以看到上面的代码,该函数只调用window.init()函数(即在全局窗口对象中定义的init()函数)而不执行任何其他操作.window.init()在AngularJS控制器中定义如下:
Run Code Online (Sandbox Code Playgroud)$window.init= function() { $scope.$apply($scope.load_guestbook_lib); };在AngularJS中,全局窗口对象由"$ window"表示法访问,该表示法是它的包装器.AngularJS中的最佳实践是不直接访问窗口对象以提高可测试性.
您不希望在第一个init()方法中执行初始化的原因是您可以在AngularJS世界中放置尽可能多的代码,例如控制器,服务和指令.因此,您可以利用AngularJS的全部功能并进行所有单元测试,集成测试等.
似乎init()在外部javascript文件中定义了一个全局函数.这个init()函数只是调用window.init()(并且应该在加载后由Google客户端库调用).但是window.init()不是全局定义的init()函数吗?所以我们不会在这里得到一个循环,直到window.init()(并因此init())被重新定义?
在我的项目中,我必须坚持使用Python 2.5(Google App Engine).在应用程序的某个地方(实际上是一个框架),我必须跟踪定义了哪些变量以及定义它们的顺序,换句话说,无论何时处理赋值运算符,我都要拦截.
使用Python 3,我将使用一种__prepare__方法定义元类M,该方法返回一个智能字典,用于跟踪何时访问它.然后我只需要使用元类M执行类语句中的所有内容.
有没有办法在Python 2.5中模拟这个?
我希望实现的目标的例子
使用Python 3的元类方法,我可以实现像引用一样工作的变量,例如M可以这样
# y is a callable
class C(metaclass=M):
x = ref(y)
x = 1
Run Code Online (Sandbox Code Playgroud)
将等效(直到创建C)y(1),即通过黑盒ref函数对C字典中的变量的第一次赋值创建此变量.进一步的赋值只需调用ref函数的参数.
编译以下C模块
static const int i = 1;
void f (const int *i);
int g (void)
{
f (&i);
return i;
}
Run Code Online (Sandbox Code Playgroud)
gcc -S -O3在x86_64机器上使用会为函数生成以下程序集g:
g:
leaq i(%rip), %rdi
subq $8, %rsp
call f@PLT
movl $1, %eax # inlined constant as an immediate
addq $8, %rsp
ret
Run Code Online (Sandbox Code Playgroud)
换句话说,return语句被编译为将常量移动$1到返回寄存器中%eax,这是有道理的,因为它i被声明为常量.
但是,如果我删除它,const那么我有
static int i = 1;
void f (const int *i);
int g (void)
{
f (&i);
return i;
} …Run Code Online (Sandbox Code Playgroud) 将函数式程序编译为机器语言时,编译器必须选择如何实现闭包。在以下示例(方案语法)中,该函数f返回(lambda (y) (+ x y))其机器表示(其闭包)必须包含一个代码指针和一个值的过程x。
(lambda (f x)
(lambda (y) (+ x y))
Run Code Online (Sandbox Code Playgroud)
闭包转换是为这种机器表示选择布局的过程。两种典型的策略是链表或平面闭包。虽然平面闭包可能涉及额外的值复制,但朴素链表通常对空间不安全(变量在最后一次使用后保持活动状态)。
Keep、Hearn 和 Dybvig 在他们的论文Optimizing Closures in O(0) time 中描述了一种优化平坦闭包策略的算法。当编译策略是基于堆栈的时,该算法给出了很好的结果。对于在堆上分配激活记录的基于 CPS 的编译器(请参阅Appel 的持续编译),Keep 等人的算法。似乎没有给出最佳结果。
另一方面,Appel 和 Shao 在他们的论文Efficient and Safe-for-Space Closure Conversion 中提出了一种非常复杂的闭包转换算法,其中闭包被实现为平面闭包和纯链表之间的某种东西,这是安全的空间和它适用于使用 CPS 并显式传递延续的编译器。本文中的例子表明,该算法给出了非常好的结果。
鉴于 Appel 和 Shao 的论文已有大约 20 年的历史,我想知道在 CPS 中为函数式语言执行闭包转换时它是否仍然是最先进的。
在他们的论文中,他们提到该算法已在 SML/NJ (1.03z) 版本中成功实现;不过,我还没有成功地在当前版本的 SML/NJ 中找到该算法的实现。
该算法是否或是否在实际编译器中使用?或者是否有改进或其他已知的闭包转换算法,当在堆上分配活动记录时,它们既安全又高效(这又允许 O(1) 实现call/cc)?这些算法是否曾经实施过,或者它们的原因是否与它们的效率背道而驰?
为了允许对各种策略进行实验,如果答案包括(引用)(开源)算法的实现,或者至少包括现有的编译器,那就太好了。这也可能暗示这些算法如何在实践中证明。
compiler-construction closures functional-programming sml smlnj
假设我有一个 RESTful Web 服务,它保存有关可以通过http://example.com/myobject之类的 url 访问的对象的信息。我希望能够以两种格式检索此信息:首先是 XML 格式的纯数据,其次是完整的 HTML 页面,其中还可能包括一个 javascript 接口来更改对象并使用 AJAX 将其放回。
实现这一目标的规范方法是什么?我应该在两个不同的网址(例如http://example.com/myobject?format=xml和 ...format=html )发布我的对象吗?(是否有比使用查询字符串更好的方法来区分此处的 URL?)或者发送诸如多部分 MIME 数据之类的内容是否明智?我可以依赖浏览器能够提取 HTML 部分吗?或者请求中是否有一些我可以使用的 HTTP 标头字段?
(使用不同格式发送的 PUT 或 POST 请求会更容易,因为服务器可以检查格式并相应地解析它。)
Python的itertools有islice(seq, start, stop, step),需要一个序列,并返回每个的一个迭代过程step之间的序列值的个值start和stop。
C ++ 20的Ranges库是否提供类似的功能,例如slice,采用随机访问迭代器start,sentinel stop和step值的函数step,并返回对和step之间的每个th值进行迭代的随机访问迭代器?startstop
如果没有,可以使用Ranges库提供的原语来实现这种迭代器适配器。
(我知道如何手动实现这样的适配器,所以这不是问题。)
我目前正在开发一个将部署在Google App Engine上的GWT 2.1应用程序.我想用新的RequestFactory实现服务器通信.
现在我的问题是如何在这种情况下处理细粒度的安全问题?某些服务器操作(在RequestContext存根中声明的操作)应限制为某些用户(可能取决于远程调用的参数).如果呼叫未经授权,我希望客户端显示登录页面(例如,可以以不同的用户身份登录).
从Expenses示例中,我知道如何实现自动重定向到登录页面,但在此示例中,安全模型非常简单:当且仅当用户登录时,才允许客户端访问servlet.
我应该在服务器端服务中引发自定义UnAuthorizedException吗?我应该在哪里拦截此例外?(我可以在servlet过滤器中执行此操作,例如Expenses示例的GaeAuthFilter吗?)
关于编程语言Scheme的R7RS报告描述了在Scheme系统中运行Scheme代码的两种方法:
1)方案系统可以运行报告中第5.1节所述的程序.
2)方案系统可以提供read-eval-print-loop,其中交互式地解释Scheme代码.
我的问题是如何在Scheme系统中反映这两种运行Scheme代码的方式,以及R7RS报告中包含的内容.
有一个eval库过程eval,它在一个正在运行的Scheme系统中执行Scheme代码,所以eval看起来就像我在搜索的内容.
但是,我可以插入的唯一保证可变环境eval是interaction-environmentrepl库过程返回的环境.但是,有了这个,我无法可靠地模拟上面的REPL(第2点),因为REPL允许导入表单,而eval程序不需要.
此外,eval由于其他原因,我无法使用交互环境来完整的Scheme程序:它通常不为空,特别是它包含所有绑定(scheme base).
为了实现1)在运行的Scheme系统中,eval库过程environment看起来很有前途,因为它允许事先导入库(这是运行程序的一部分).但是,环境是不可变的,所以我无法评估define环境中的s.一种方法是将程序体包装在一个lambda表单中,以便define定义局部变量.但是,这也行不通:在一个lambda表单中,所有定义都必须出现在body的开头(对于Scheme程序的顶层不是这样),并且在lambda表单库中,绑定可以被词法覆盖,顶级绑定无法实现.
由于Scheme是Turing-complete,我当然可以在正在运行的Scheme系统中模拟Scheme系统,但我想知道是否可以通过使用该eval过程.我感兴趣的一个原因是eval可能会优化(例如通过JIT编译器后端),因此使用此过程可能会提供接近本机的速度(与手动编写简单的解释器相比).
以下(废话)Python模块的doctest失败:
"""
>>> L = []
>>> if True:
... append_to(L) # XXX
>>> L
[1]
"""
def append_to(L):
L.append(1)
class A(object):
pass
return A()
import doctest; doctest.testmod()
Run Code Online (Sandbox Code Playgroud)
这是因为标记为XXX的行之后的输出为<__main__.A object at ...>(由返回append_to)。当然,我可以将输出直接放在标记为XXX的行之后,但是在我的情况下,这会使读者分心于应实际测试的内容,即该功能的副作用append_to。因此,如何抑制该输出或如何忽略它。我尝试了:
"""
>>> L = []
>>> if True:
... append_to(L) # doctest: +ELLIPSIS
...
>>> L
[1]
"""
def append_to(L):
L.append(1)
class A(object):
pass
return A()
import doctest; doctest.testmod()
Run Code Online (Sandbox Code Playgroud)
但是,这会产生一个ValueError: line 4 of the docstring for __main__ has inconsistent leading whitespace: …
我已经阅读了即将发布的R7RS方案标准(小语言)的当前草案,但我不明白在什么条件下重新定义顶级绑定不是错误。
我想可以定义或设置!第二次在程序顶层引入的绑定。但是从外部库导入的绑定又如何呢?是否可以通过标准覆盖这些绑定?
报告第 26/27 页写道:
程序的顶层还可能包括导入声明。在库声明中,使用不同的绑定多次导入相同的标识符,或者使用 Define、define-syntax 或 set! 重新定义或改变导入的绑定都是错误的。然而,REPL 应该允许这些操作。
这是否意味着重新定义仅在导入绑定的库中发生时才是错误?
据我所知,如果编译器不知道“ +”是否仍然意味着内置加法或任何其他用户指定的错误,它会禁止编译器进行优化。但从这个角度来看,在库级别限制禁止重新绑定是没有意义的,因为它对于程序中的导入绑定也有意义(至少)。
PS:因为这都是关于一个计划程序的环境:我说环境不是一等公民,因为你无法掌握当前的环境,我这样说对吗?(这反过来又允许编译的程序忘记所选择的绑定名称。)
我有关于计算柔性容器宽度的问题.在这方面,该元素似乎与其他元素的行为不同.
如果我将样式添加"display: flex"到<span>包含文本的元素,则它占用其父元素宽度的100%.
如果我向<button>元素添加相同的样式,则根据其文本内容计算其宽度.
这是怎么回事?<button>元素上的哪个(隐式)CSS规则会产生这种行为?我怎样才能在两种行为之间切换?
(我已经在Firefox和Chrome中对此进行了测试.我也可以使用<div>而不是<span>.)
gwt ×2
html ×2
javascript ×2
python ×2
r7rs ×2
scheme ×2
angularjs ×1
assembly ×1
browser ×1
c ×1
c++ ×1
c++20 ×1
closures ×1
css ×1
css3 ×1
doctest ×1
dom ×1
eval ×1
events ×1
flexbox ×1
gcc ×1
http ×1
metaclass ×1
python-3.x ×1
reflection ×1
rest ×1
security ×1
servlets ×1
sml ×1
smlnj ×1
stl ×1
uibinder ×1
url ×1