我认识到,有在这里大约几个问题是什么钻营和部分应用功能,但我问他们是如何不同.举个简单的例子,这是一个用于查找偶数的curry函数:
def filter(xs: List[Int], p: Int => Boolean): List[Int] =
if (xs.isEmpty) xs
else if (p(xs.head)) xs.head :: filter(xs.tail, p)
else filter(xs.tail, p)
def modN(n: Int)(x: Int) = ((x % n) == 0)
Run Code Online (Sandbox Code Playgroud)
所以你可以编写以下内容来使用它:
val nums = List(1,2,3,4,5,6,7,8)
println(filter(nums, modN(2))
Run Code Online (Sandbox Code Playgroud)
返回:List(2,4,6,8).但我发现我可以用这种方式做同样的事情:
def modN(n: Int, x: Int) = ((x % n) == 0)
val p = modN(2, _: Int)
println(filter(nums, p))
Run Code Online (Sandbox Code Playgroud)
还返回:List(2,4,6,8).
所以我的问题是,两者之间的主要区别是什么,何时使用一个而不是另一个?这是一个过于简单的例子来说明为什么一个人会被用在另一个上面?
我试图理解为什么存在CF和NS对象,它们似乎做同样的事情并且可以通过免费桥接进行互换.如果CFArray和NSArray做同样的事情,并且我可以自由地在它们之间施放,那么它们存在的重点是什么?是否有关于何时使用其中一个的经验法则?CF对象只是旧框架中的遗留对象吗?任何对此的见解将不胜感激.
我正在尝试使用CGPathApply迭代CGPathRef对象中的每个CGPathElement(主要是为了编写一个自定义方式来保存CGPath数据).问题是,每次调用CGPathApply时,我的程序都会崩溃而根本没有任何信息.我怀疑问题在于应用程序功能,但我不知道.以下是我的代码示例:
- (IBAction) processPath:(id)sender {
NSMutableArray *pathElements = [NSMutableArray arrayWithCapacity:1];
// This contains an array of paths, drawn to this current view
CFMutableArrayRef existingPaths = displayingView.pathArray;
CFIndex pathCount = CFArrayGetCount(existingPaths);
for( int i=0; i < pathCount; i++ ) {
CGMutablePathRef pRef = (CGMutablePathRef) CFArrayGetValueAtIndex(existingPaths, i);
CGPathApply(pRef, pathElements, processPathElement);
}
}
void processPathElement(void* info, const CGPathElement* element) {
NSLog(@"Type: %@ || Point: %@", element->type, element->points);
}
Run Code Online (Sandbox Code Playgroud)
关于为什么调用这个applier方法似乎崩溃的任何想法?任何帮助是极大的赞赏.
我意识到这与现有帖子类似,(NSError**)错误是什么意思?,但我的问题有点不同.我理解双指针是如何工作的,以及这是常见的iOS API错误模式.我的问题更多的是关于单指针,以及为什么这段代码不起作用:
- (BOOL)someMethodWithError:(NSError *)error
{
...
if( errorOccured )
{
NSError *e = [[[NSError alloc] initWithDomain:@"" code:1 userInfo:nil] autorelease];
error = e;
return NO;
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
实施使用:
NSError *error = nil;
if( ![someObj someMethodWithError:error] )
{
NSLog(@"Error: %@", [error localizedDescription]);
}
Run Code Online (Sandbox Code Playgroud)
为什么方法实现中的赋值不会将指针重新分配给新的NSError对象?
我对Play如何有点困惑!在其控制器层中工作.一些文档说明Play!始终是异步和非阻塞的.所以我对Action vs Action.async感到困惑.动作阻止了吗?如果是这样,并且docs说你应该始终保持异步和非阻塞,那么你应该总是在所有控制器中使用Action.async吗?你为什么不选择呢?我确信这里有一些我不理解的东西,理解这一点会非常感谢你的任何专业知识.
我非常感谢任何帮助,理解为什么我从变换中获得的数据比我在样式表中实际选择的数据要多.所以这是我的XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<e:root xmlns:e="http://www.yahoo.com">
<e:first>Hi</e:first>
<e:cds>
<e:cd>
<e:title>Eric</e:title>
</e:cd>
<e:cd>
<e:title>Tara</e:title>
</e:cd>
</e:cds>
</e:root>
Run Code Online (Sandbox Code Playgroud)
这是我的样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:e="http://www.yahoo.com" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="e:cd">
<xsl:element name="T"><xsl:value-of select="e:title"/></xsl:element>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
这是输出:
<?xml version="1.0" encoding="UTF-8"?>
Hi
<T>Eric</T>
<T>Tara</T>
Run Code Online (Sandbox Code Playgroud)
如何停止选择<e:first>节点的转换?我没有在变换中明确要求它,但它在我的结果中出现(带有'Hi'文本).我疯了,试图理解为什么.非常感谢您提前提供的任何帮助.