我正在设计我自己的编程语言(如果您关注它在www.btetrud.com上称为Lima),我正试图围绕如何实现运算符重载.我决定在特定对象上绑定运算符(它是基于原型的语言).(它也是一种动态语言,其中'var'就像javascript中的'var' - 一个可以包含任何类型值的变量).
例如,这将是一个带有重新定义的+运算符的对象:
x =
{ int member
operator +
self int[b]:
ret b+self
int[a] self:
ret member+a
}
Run Code Online (Sandbox Code Playgroud)
我希望它的作用相当明显.当x是右操作数和左操作数时定义运算符(self用于表示).
当你有两个以开放式方式定义运算符的对象时,问题是该怎么做.例如,您在这种情况下做了什么:
A =
{ int x
operator +
self var[b]:
ret x+b
}
B =
{ int x
operator +
var[a] self:
ret x+a
}
a+b ;; is a's or b's + operator used?
Run Code Online (Sandbox Code Playgroud)
因此,对这个问题的一个简单回答是"好吧,不要做出含糊不清的定义",但它并不那么简单.如果包含具有A类型对象的模块,然后定义B类型的对象,该怎么办?
你如何创建一种语言来防止其他对象劫持你想要对你的运营商做什么?
C++将运算符重载定义为类的"成员".C++如何处理这样的歧义?
Oracle关于原子访问的文档(http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html)说明了这一点:
"一个volatile变量建立一个发生在之前的关系......这意味着......当一个线程读取一个volatile变量时,它不仅会看到volatile的最新变化,还会看到导致代码的副作用改变."
我无法绕过那个头.我理解volatile变量是如何工作的(在> = Java 5中),但是我想知道java如何决定哪些副作用"导致"变化为volatile变量.
所以我想我的问题是:这种保证有哪些副作用?
编辑:
所以我已经知道如果线程A修改了一个volatile变量,然后线程B读取它,那么在写入volatile变量之前发生的所有线程A的写入都与线程B"相关"(即缓存的值)由线程A进行的前述写入的变量在线程B)中无效.如我错了请纠正我.
阅读http://nodejs.org/api/domain.html上的文档使其有点模糊:" 尽最大努力尝试清理与域相关的任何和所有IO ".它提到计时器已关闭,这不完全是IO.知道domain.dispose所做的全面的事情列表会很高兴.有人有这个清单吗?
此外,有没有办法挂钩该功能 - 即允许在运行domain.dispose()时调用一些自定义清理代码?
我想将给脚本的命令行参数传递给另一个命令,但我还想先在前面添加一些额外的参数.我怎么能用bash做到这一点?
这将把所有参数发送到命令:
command $@
Run Code Online (Sandbox Code Playgroud)
但是我想要更像的东西:
command [argument1, argument2, $@]
Run Code Online (Sandbox Code Playgroud)
你如何在bash中做这样的事情?
我想用JavaScript创建一个控制台(想想chrome的开发控制台),用于Web应用程序,它具有持久的范围.所以你可以说,设置一个变量,然后在控制台中访问该变量.有一种简单的方法可以在JavaScript中执行此操作吗?
一个示例会话:
var x = SomeCustomFunction()
>> "the result"
x.slice(4)
>> "result"
Run Code Online (Sandbox Code Playgroud) 我想以编程方式找出 npm 安装全局模块的文件夹。这个问题很相似,但答案对全局安装的模块不起作用:如何以编程方式获取 npm 安装模块的详细信息?
我想知道如果您同时将两个不同的读取流传输到同一目的地,node.js 会如何操作。例如:
var a = fs.createReadStream('a')
var b = fs.createReadStream('b')
var c = fs.createWriteStream('c')
a.pipe(c, {end:false})
b.pipe(c, {end:false})
Run Code Online (Sandbox Code Playgroud)
这是将a写入c,然后将b写入c吗?或者它把一切都搞乱了?
我想知道如何将可拖动 dom 节点的移动限制为仅向上和向下,并且理想情况下,还限制它可以拖动的最大距离。请纯 JavaScript 回答。
我希望有某种方法可以与本机可拖动的东西进行交互,而不是使用鼠标事件从头开始实现它。
更新:要完全清楚,当我说“限制移动”时,我指的是限制被拖动元素的移动。例如,如果您单击拖动并尝试对角拖动 dom 节点,我希望 dom 节点仅更改其 y 轴。
如果我有以下文件:
{a: {x:1}} // without array
{a: [{x:1}]} // with array
Run Code Online (Sandbox Code Playgroud)
有没有办法查询{'a.x':1}将返回第一个而不是第二个?IE,我想要ax为1的文档,而a不是数组.
javascript ×5
node.js ×3
atomic ×1
bash ×1
browser ×1
c3 ×1
concurrency ×1
d3.js ×1
html ×1
java ×1
linux ×1
mongodb ×1
npm ×1
overloading ×1
side-effects ×1
stream ×1
volatile ×1