我正在阅读文档,我不断地在语言的某些设计决策中摇头.但令我困惑的是如何处理数组.
我赶到操场上试了一下.你也可以尝试一下.所以第一个例子:
var a = [1, 2, 3]
var b = a
a[1] = 42
a
b
Run Code Online (Sandbox Code Playgroud)
这里a
和b
都是[1, 42, 3]
,我可以接受.数组被引用 - 好的!
现在看这个例子:
var c = [1, 2, 3]
var d = c
c.append(42)
c
d
Run Code Online (Sandbox Code Playgroud)
c
是[1, 2, 3, 42]
BUT d
的[1, 2, 3]
.也就是说,d
看到了最后一个例子中的变化,但是在这个例子中看不到它.文档说这是因为长度发生了变化.
现在,这个怎么样:
var e = [1, 2, 3]
var f = e
e[0..2] = [4, 5]
e
f
Run Code Online (Sandbox Code Playgroud)
e
是的[4, 5, 3]
,这很酷.有一个多索引替换很好,但 …
在Vim的插入模式下有没有办法重复一个角色?例如,假设我想插入80个破折号,就像emacs一样,我会输入:
Ctrl+U 8 0 -
我知道如何在VIM中执行此操作的唯一方法是退出正常模式以获取repeat参数,然后返回插入模式以键入破折号,然后退出以插入实际破折号,然后返回插入模式以继续打字.序列非常长:
Esc 8 0 a - Esc a
不切换进出模式会很好.
我正在尝试设计一个实时事件发生的系统,我想将它们与时钟同步. [NSDate date]
通常可以,但用户可以改变这一点并欺骗系统.我需要的是一个时钟,我可以从相对时间(例如64位计数器) - 我不需要绝对时间(或一天中的时间等).
我可以使用这样的API吗?
编辑:我还想补充一点,这个时钟需要在应用程序的会话上持久化.
编写可以接受currying的函数时,可以将其写为返回函数的单参数函数.例如,
let add x =
let inner y = x + y
inner
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做:
add 3 4
Run Code Online (Sandbox Code Playgroud)
要么:
let add3 = add 3
add3 4
Run Code Online (Sandbox Code Playgroud)
我的问题是,因为你返回一个函数,你在概念上调用了一个函数两次(外部函数和内部函数).这比这慢吗:
let add x y = x + y
Run Code Online (Sandbox Code Playgroud)
或者编译器是否优化add 3 4
了curried定义中的调用?
我刚下载了用于PC的GVIM和用于Mac的MacVIM,它们都与我在MSYS中使用的VIM有不同的行为.
这是问题所在.我在VIM中调出一个文件并进入插入模式.我不能再删除任何旧文本了.我可以插入新文本并删除它们就好了所以我知道我的退格键和删除键正在工作.更令人讨厌的是,如果我将光标移动到另一条线并返回原来的线条,我输入的新文本也会变得不可删除.
命令行VIM允许我在插入模式下删除旧文本,但GUI版本不允许.我已经查看了选项并用Google搜索但没有想出任何东西.
有谁知道如何让GUI版本像VIM的命令行版本一样?
我试图哄骗AVFoundation从自定义URL读取.自定义网址的工作原理.下面的代码创建一个带有电影文件的NSData:
NSData* movieData = [NSData dataWithContentsOfURL:@"memory://video"];
Run Code Online (Sandbox Code Playgroud)
我使用以下代码设置了一个AVAssetResourceLoader对象:
NSURL* url = [NSURL URLWithString:@"memory://video"];
AVURLAsset* asset = [[AVURLAsset alloc] initWithURL:url options:nil];
AVAssetResourceLoader* loader = [asset resourceLoader];
[loader setDelegate:self queue:mDispatchQueue];
Run Code Online (Sandbox Code Playgroud)
调度队列是并发的.
然后我尝试从电影中提取第一帧:
AVAssetImageGenerator* imageGen = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
CMTime time = CMTimeMakeWithSeconds(0, 600);
NSError* error = nil;
CMTime actualTime;
CGImageRef image = [imageGen copyCGImageAtTime:time
actualTime:&actualTime
error:&error];
if (error) NSLog(@"%@", error);
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此代码时,我会得到:
2013-02-21 10:02:22.197 VideoPlayer[501:907] Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x1f863090 {NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x1e575a90 "The operation couldn’t …
Run Code Online (Sandbox Code Playgroud) 这既是一个问题也是一个参考,我希望人们可以在此基础上进行构建,以便有类似问题的人可以重复使用它.
我们如何可靠地检测特定版本的C/C++/ObjC编译器?现在我知道Visual Studio的答案,并部分了解Xcode的答案.
现在,对于Visual Studio编译器,我们有_MSC_VER,它是用这些值定义的:
Version 1.0 800
Version 2.0 900
Version 2.x 900
Version 4.0 1000
Version 5.0 1100
Version 6.0 1200
Version 7.0 1300
Version 7.1 1310
Version 8.0 1400 (Visual Studio 2005)
Version 9.0 1500 (Visual Studio 2008)
Version 10.0 1600 (Visual Studio 2010)
Version 11.0 1700 (Visual Studio 2012)
Run Code Online (Sandbox Code Playgroud)
现在对于Xcode编译器,我们有这个定义:
__APPLE_CC__
Run Code Online (Sandbox Code Playgroud)
但我通过谷歌找到的唯一值(Mac文档似乎没有这些值)是:
Xcode 3.0 5465
Xcode 3.1 5470
Xcode 3.1 (GCC 4.2) 5553
Xcode 3.2.3 5664 (Got this value from my own compiler)
Run Code Online (Sandbox Code Playgroud)
任何人都可以填写此列表或提供完整列表的链接吗?也许我们也可以为其他编译器提供信息.
我正在尝试将SDL和SDL_ttf框架添加到我的应用程序中,并且我已经按照通常的方式完成了它:将它们添加到"链接二进制文件库"部分并添加了一个复制文件阶段,将它们复制到Frameworks目录.这确实创建了一个包含嵌入式框架的应用程序包.但是,当我运行该应用程序时,我收到此错误:
dyld:未加载库:@ rpath/SDL_ttf.framework/Versions/A/SDL_ttf参考自:/Users/matthew.davies/Library/Developer/Xcode/DerivedData/MacHub-ambfqujqxbxyiqapaoctvsucpdeu/Build/Products/Release/MacHub.app/内容/ MacOS/MacHub原因:找不到图像
我不知道还有什么可以做到这样,应用程序可以找到框架,尽管嵌入其捆绑.
有什么想法吗?
我一直试图理解用于打开websocket的一些代码:
var ws = new WebSocket('ws://my.domain.com');
ws.onopen = function(event) {
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是握手是如何开始的?如果它是在WebSocket构造函数中启动的话,那么如果onopen没有被设置那么它是如何调用的呢?如果WebSocket构造函数创建了一个执行握手的线程,那么在握手结束之前是否必须足够快地定义onopen?如果是这样,那听起来有点危险,因为如果JS虚拟机速度变慢,则可以在定义onopen之前完成握手,这意味着事件不会被处理.或者设置onopen功能会触发握手吗?
有人可以向我解释API的机制吗?
我正在尝试解析一系列语法:<direction> <type> <name>.例如:
in float foo
Run Code Online (Sandbox Code Playgroud)
方向可以是in,out或in_out.我已成功通过使用qi :: symbols类将方向关键字转换为枚举来解析正确的文本.
但是,问题显示我没有正确的文本.举个例子:
int foo
Run Code Online (Sandbox Code Playgroud)
符号表解析器将除'int'类型的'in'部分,因此结果将是:
direction: in
type: t
name: foo
Run Code Online (Sandbox Code Playgroud)
并且未检测到错误.能够解析in,out和in_out保留字并确保它们后跟非标识符字符以便前一文本的"int"部分失败的最佳方法是什么?
谢谢
我编写了一些测试代码来绕过泛型语法:
let add_stuff<'T> x y =
printfn "%A" (x + y)
let stuff() =
add_stuff 5.5 2.4
add_stuff 3 4
Run Code Online (Sandbox Code Playgroud)
第二次add_stuff
调用无法编译。为什么是这样?为什么编译器不推断类型?
f# ×2
ios ×2
objective-c ×2
vim ×2
xcode ×2
arrays ×1
asynchronous ×1
avfoundation ×1
boost ×1
boost-spirit ×1
bundle ×1
currying ×1
frameworks ×1
generics ×1
javascript ×1
macos ×1
parsing ×1
swift ×1
time ×1
websocket ×1