鉴于:
console.log(boo); this outputs undefined
Run Code Online (Sandbox Code Playgroud)
鉴于:
var boo = 1;
console.log(boo); this outputs 1
Run Code Online (Sandbox Code Playgroud)
在定义boo并设置为1后,如何重置boo,以便console.log输出undefined?
谢谢
我最近一直在开始使用Node.js而且我遇到过一种情况,我需要一些关于规定node.js完成任务的方法的指导.在这种特殊情况下,我需要创建一堆目录,当所有目录都已创建时,我需要执行一些最终操作.创建目录的顺序无关紧要,我只需要在最后一个操作后执行最后的操作.
实现这一目标的最简单方法是回归旧的同步习惯.也就是说,只需调用fs.mkdirSync
每个目录并在最后执行操作.例如:
fs.mkdirSync('a', 0755);
fs.mkdirSync('a/b', 0755);
fs.mkdirSync('a/b/c', 0755);
performFinalOperation();
Run Code Online (Sandbox Code Playgroud)
虽然这会起作用,但感觉不像是node.js这样做的方式.显然,程序会在等待操作系统创建目录并返回时阻塞.在负载较重的系统上,远程安装的文件系统mkdirSync
可能需要很长时间.很明显,这不是最好的方法.
Node.js的一个主要卖点是它是异步的.所以调用fs.mkdir
可以通过回调链接:
fs.mkdir('a', 0755, function(e) {
if (!e) {
fs.mkdir('a/b', 0755, function(e) {
if (!e) {
fs.mkdir('a/b/c', 0755, function(e) {
if (!e) {
performFinalOperation();
}
});
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
同样,这种方法我确定有效,但它会导致非常深的嵌套和代码重复.它确实具有在创建目录时不阻塞的好处,但成本是多少?
另一种方法是真正想要避免代码重复和嵌套:
(function (directories) {
if (directories.length === 0) {
performFinalOperation();
} else {
var tail = arguments.callee;
fs.mkdir(directories.shift(), 0755, function(e) {
tail(directories);
});
}
})(['a', 'a/b', 'a/b/c']);
Run Code Online (Sandbox Code Playgroud)
这种方法利用了各种疯狂的东西:匿名自我调用函数和神奇的arguments.callee.但最糟糕的是,乍看之下代码的作用并不明显.
因此,虽然具体问题是创建目录,但我更感兴趣的是经验丰富的node.js老手在出现这种情况时会采取的方法.我特别不关心库是什么让这更容易.
我正在尝试编写一个应用程序,允许用户从Finder中拖动文件并将其拖放到NSStatusItem
.到目前为止,我已经创建了一个实现拖放界面的自定义视图.当我将这个视图添加为它的子视图时NSWindow
,一切正常 - 鼠标光标给出了适当的反馈,当删除时我的代码被执行.
但是,当我使用相同的视图作为NSStatusItem's
视图时,它的行为不正确.鼠标光标提供适当的反馈,表明文件可以被删除,但是当我删除文件时,我的丢弃代码永远不会被执行.
我需要做些什么特别的事情来实现拖放NSStatusItem
吗?
我正在尝试获取能够打开某种文件的应用程序列表.到目前为止,我已经能够得到使用单个应用程序的名称NSWorkspace
的getInfoForFile:application:type:
方法.
是否有任何API可以调用以获取能够打开文件的应用程序列表?
在AppKit(对于Mac OS X上的Cocoa)中是否有与UIKit相同的方法[NSString sizeWithFont:constrainedToSize:]
?
如果没有,我怎么能获得渲染特定字符串约束宽度/高度所需的空间量?
更新:下面是我正在使用的代码片段,我希望它会产生我想要的结果.
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
[NSFont systemFontOfSize: [NSFont smallSystemFontSize]], NSFontAttributeName,
[NSParagraphStyle defaultParagraphStyle], NSParagraphStyleAttributeName,
nil];
NSSize size = NSMakeSize(200.0, MAXFLOAT);
NSRect bounds;
bounds = [@"This is a really really really really really really really long string that won't fit on one line"
boundingRectWithSize: size
options: NSStringDrawingUsesFontLeading
attributes: attributes];
NSLog(@"height: %02f, width: %02f", bounds.size.height, bounds.size.width);
Run Code Online (Sandbox Code Playgroud)
我希望输出宽度为200,高度将大于单行的高度,但它会产生:
height: 14.000000, width: 466.619141
Run Code Online (Sandbox Code Playgroud)
谢谢!
我最近一直在做一些关于使用Hadoop,Hive和Pig做一些数据转换的调查.作为其中的一部分,我注意到数据文件的架构似乎根本没有附加到文件.数据文件只是平面文件(除非使用类似SequenceFile的东西).每个想要使用这些文件的应用程序都有自己的方式来表示这些文件的模式.
例如,我将文件加载到HDFS中并希望使用Pig进行转换.为了有效地使用它,我需要在加载数据时指定文件的模式:
EMP = LOAD 'myfile' using PigStorage() as { first_name: string, last_name: string, deptno: int};
Run Code Online (Sandbox Code Playgroud)
现在,我知道在使用PigStorage 存储文件时,可以选择将模式与其一起写出来,但是为了首先将文件导入Pig,您似乎需要指定模式.
如果我想在Hive中使用相同的文件,我需要创建一个表并使用它来指定模式:
CREATE EXTERNAL TABLE EMP ( first_name string
, last_name string
, empno int)
LOCATION 'myfile';
Run Code Online (Sandbox Code Playgroud)
在我看来,这是非常脆弱的.如果文件格式稍有变化,则必须在每个应用程序中手动更新架构.我确定我很天真,但是将模式存储在数据文件中是不是有意义?这样,数据可以在应用程序之间移植,并且使用其他工具的障碍会更低,因为您不需要为每个应用程序重新编码模式.
所以问题是:有没有办法在Hadoop/HDFS中指定数据文件的模式,还是需要在每个应用程序中指定数据文件的模式?
当我使用AppleScript获取对象的属性时,将返回一条记录.
tell application "iPhoto"
properties of album 1
end tell
==> {id:6.442450942E+9, url:"", name:"Events", class:album, type:smart album, parent:missing value, children:{}}
Run Code Online (Sandbox Code Playgroud)
如何迭代返回记录的键/值对,以便我不必确切地知道记录中的键是什么?
为了澄清这个问题,我需要枚举键和值,因为我想编写一个通用的AppleScript例程来将记录和列表转换为JSON,然后由脚本输出.
我正在尝试为写入套接字的某些通信代码编写一些单元测试。在测试期间,我想将我的通信库写入一个字符串,然后可以将字符串的内容与我希望写入的内容进行比较。
在Java中,我将使用类似a的名称,StringWriter
以便我的通信代码可以写入标准Writer
接口,最后,我可以只索要所有已写入的数据。
是否有与Perl等效的Python或StringIO?这样的东西已经内置了吗?
cocoa ×3
javascript ×2
apache-pig ×1
appkit ×1
applescript ×1
hadoop ×1
hdfs ×1
hive ×1
io ×1
json ×1
macos ×1
node.js ×1
nsstatusitem ×1
nsstring ×1
perl ×1
stringio ×1