Python教程说"在操作符和逗号后使用空格,但不能直接在包围结构内:a = f(1,2)+ g(3,4)." "不直接在包围结构内"究竟意味着什么?
像大多数人一样,我最近下载了最新版本的XCode(4.3.1).我注意到,当我创建新UIViewController对象时,关联.m文件包含我以前从未见过的其他类定义代码.
具体来说,如果我创建一个UIViewController名为'TestViewController' 的新命令,我会得到以下.m文件输出.
\\... removed comments...
#import "TestViewController.h"
@interface TestViewController ()
@end
@implementation TestViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
\等等...
自XCode 4.3以来新添加的代码是#import声明下的部分:
@interface TestViewController ()
@end
Run Code Online (Sandbox Code Playgroud)
这段代码的目的是什么?可以/应该在括号内进行任何操作吗?是否有任何代码都在@interface和@end语句中?
简而言之,将此代码添加到模板的重点是什么?作为一个有趣的旁注,当我尝试NSObject从模板创建时,没有添加上面提到的代码片段.它可能出现在其他类型的类模板中,但目前我只遇到过它UIViewController和UITableViewController对象.
获得了"ClientContacts"列表---其中包含一个LastName(在人类的情况下)或一个EntityName(在通用联系的情况下,例如techsupport@mycompany.com).
我想要做的是按LastName按字母顺序排序此列表,如果不存在LastName(换句话说,存在EntityName),则将该EntityName视为LastName,并继续排序,就像它是LastName一样.
所以期望的结果如下:
这会导致崩溃,因为它遇到了一些没有LastName的ClientContacts.
clientContactList.Sort(
delegate(ClientContact c1, ClientContact c2)
{ return c1.LastName.CompareTo(c2.LastName); });
Run Code Online (Sandbox Code Playgroud)
以下允许我通过而不崩溃,它通过ClientContact EntityName的第一个和那些LastNames对它进行排序:
list.Sort(delegate(ClientContact c1, ClientContact c2) {
try
{
return c1.LastName.CompareTo(c2.LastName);
}
catch
{
try
{
return c1.EntityName.CompareTo(c2.LastName);
}
catch
{
return c1.EntityName.CompareTo(c2.EntityName);
}
}
});
Run Code Online (Sandbox Code Playgroud)
导致:
如何将列表排序为上面所需的结果?
缺乏维护动态类型代码的经验,我正在寻找处理这种情况的最佳方法:
(python中的示例,但可以使用任何动态类型的语言)
def some_function(object_that_could_be_a_list):
if isinstance(object_that_could_be_a_list, list):
for element in object_that_could_be_a_list:
some_function(element)
else:
# Do stuff that expects the object to have certain properties
# a list would not have
Run Code Online (Sandbox Code Playgroud)
我对此感到非常不安,因为我认为一种方法应该只做一件事,而我认为它不像它应该的那样可读.所以,我很想做三个函数:第一个是"任何对象"和"排序"在另外两个之间,一个用于列表,另一个用于"简单"对象.然后,这会增加一些复杂性.
什么是最"可持续"的解决方案,以及保证易于维护的解决方案?对于那些我不知道的情况,python中有成语吗?提前致谢.
最近我开始了一个C++项目,以便熟悉GTK功能.我使用C++方法'因为我总是用java编程,所以在我看来很熟悉.
现在,GTK库是用C代码编写的,所以我在类和C代码之间实现了一些混合.我的一个问题是GTK事件与回调函数一起使用.为了将这些事件封装在类中,我使用了静态方法.
最重要的是静态方法和静态变量在类中是不可见的,而且我已经编写了一些其他静态函数,仅在类的.cpp文件中声明,从回调内部调用但与类完全分离.
在我看来这种方法有点笨拙,所以我想知道有没有最好的方法来处理类中的回调并允许它们以优雅的方式与类方法和结构进行交互?
谢谢!
假设我有以下文件:
进一步假设main.cpp调用routine()在routine.cpp中定义的函数,但routine.cpp也包含仅由routine()函数使用的函数.换句话说,routine.cpp包含仅从routine.cpp中调用的函数和从其他源文件调用的函数.
显然main.cpp将包含#include "routine.h".但是,routine.h是否包含在routine.cpp(样式A)中定义的所有函数的原型,或者routine.h是否只包含从其他源文件(样式B)调用的函数的原型?
我总是在风格A之后编写代码,但最近我想知道风格B是否更具风格.(如果使用样式B,那么仅在routine.cpp中使用的函数的原型可以位于routine.cpp的顶部,或者定义可以简单地在它们的使用之前.)
我在Linux代码中看到了一堆名为__foo的函数.双下划线代表什么,何时应该使用?
我的问题类似于这个问题,但我不想为此使用库.
想象一下,我们有一个我们想要输出的名称数组.
string names[] = { "Peter", "Max", "Jack", "Daniel", "Luke" };
for(int i = 0; i < sizeof(names); i++)
{
cout << names[i];
}
Run Code Online (Sandbox Code Playgroud)
输出: PeterMaxJackDanielLuke
这不是我们所谓的用户友好,所以让我们在名称之间输出逗号.
for(int i = 0; i < sizeof(names); i++)
{
cout << names[i] << ", ";
}
Run Code Online (Sandbox Code Playgroud)
输出: Peter, Max, Jack, Daniel, Luke,
问题是结尾逗号.随着if我可以检查每一个循环for,如果它是最后一个元素,但这并不似乎是一个干净的解决方案.
在不使用库的情况下在元素之间插入逗号的最佳方法是什么?
有两个代码段:
someObject.getBla1().getBla2().performBlah();
Run Code Online (Sandbox Code Playgroud)
第二个:
bla1=someObject.getBla1();
bla2=bla1.getBla2();
bla2.performBlah();
Run Code Online (Sandbox Code Playgroud)
我总是被告知要避开第一个,并使用第二个,因为我觉得第二个只是一个痛苦.
第二个有什么好处?
例如:
<ul>
<a href="http://google.com"><li id="someId"></li></a>
...
...
...
</ul>
Run Code Online (Sandbox Code Playgroud)
这是我现有的CSS风格的快速破解.我想知道我是否应该重构它并将标签放在里面.
coding-style ×10
c++ ×3
linux ×2
list ×2
python ×2
c ×1
c# ×1
callback ×1
cocoa-touch ×1
css ×1
formatting ×1
gtk ×1
header ×1
header-files ×1
html ×1
ios ×1
performance ×1
refactoring ×1
sorting ×1
xcode4.2 ×1
xcode4.3 ×1