我有一个项目,我使用SCons(和MinGW/gcc,取决于平台)构建.该项目依赖于其他几个库(让我们称之为libfoo和libbar),它可以在不同的地方为不同的用户进行安装.
目前,我的SConstruct文件将硬编码路径嵌入到这些库中(例如,类似:) C:\libfoo.
现在,我想在我的SConstruct文件中添加一个配置选项,以便安装libfoo在其他位置的用户(比如说C:\custom_path\libfoo)可以执行以下操作:
> scons --configure --libfoo-prefix=C:\custom_path\libfoo
Run Code Online (Sandbox Code Playgroud)
要么:
> scons --configure
scons: Reading SConscript files ...
scons: done reading SConscript files.
### Environment configuration ###
Please enter location of 'libfoo' ("C:\libfoo"): C:\custom_path\libfoo
Please enter location of 'libbar' ("C:\libfoo"): C:\custom_path\libbar
### Configuration over ###
Run Code Online (Sandbox Code Playgroud)
选择后,应将这些配置选项写入某个文件,并在每次scons运行时自动重新读取.
是否scons提供这样的机制?我该如何实现这种行为?我并不完全掌握Python,所以即使是明显(但完整)的解决方案也是受欢迎的.
谢谢.
有一个有用的Ruby习惯用法tap允许你创建一个对象,对它做一些操作并返回它(我在这里只使用一个列表作为例子,我真正的代码更多参与):
def foo
[].tap do |a|
b = 1 + 2
# ... and some more processing, maybe some logging, etc.
a << b
end
end
>> foo
=> [1]
Run Code Online (Sandbox Code Playgroud)
使用Rails有一个类似的方法returning,所以你可以写:
def foo
returning([]) do |a|
b = 1 + 2
# ... and some more processing, maybe some logging, etc.
a << b
end
end
Run Code Online (Sandbox Code Playgroud)
这说明了一切.无论你对对象做了多少处理,它仍然清楚它是函数的返回值.
在Python中我必须写:
def foo():
a = []
b = 1 + 2
# ... and some more processing, maybe some …Run Code Online (Sandbox Code Playgroud) 在rails 2.x中,我可以将--git选项传递给./script/generate,以便在创建后自动将文件添加到git.但是我无法在Rails 3.0中找到这样的选项(或配置).
这已被删除或我遗失了什么?我尝试了一段时间研究这个,但我找不到任何参考.
谢谢,Prateek
为了更好地理解"引擎盖下"发生的事情,我希望对我的应用程序中发生的任何通知进行完整的跟踪.
像我一样天真,我尝试的第一件事就是这样注册:
我的应用程序的某个地方:
{
[...]
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(traceNotifications:) name:nil object:nil];
[...]
}
- (void)traceNotifications:(NSNotification *)notification
{
NSLog(@"received notification %@", [notification name]);
}
Run Code Online (Sandbox Code Playgroud)
我实际上通过这种方式获得了许多通知.但在某些时候,应用程序确实崩溃了.堆栈跟踪显示它在realizeClass中与EXC_BAD_ACCESS崩溃,根据我的经验,它确实表明在释放后调用了某些东西.然而,我的观察对象仍然存在,它的解除分配器尚未被调用.
我试过的下一件事是设置一个断点-[NSNotificationCenter postNotification:],然后po {NSNotification *}($ebp+16)每当我的断点被困时在gdb-console内部运行.这确实揭示了一些通知,但不是我期望/希望的所有通知.例如,我的应用程序确实正确处理了方向更改,但在重新定向设备时(在模拟器中)我没有看到任何通知被捕获.
我错过了什么?有没有办法(例如工具)可靠地观察NSNotificationCenter?
谢谢你的任何提示.
使用Uncrustify工具我想应用1TBS样式,它放置这样的大括号:
if (x < 0) {
printf("Negative");
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?我似乎找不到合适的选择.
是否有任何Python项目/模块在二进制plist编写器上工作?我需要一个用于我正在做的REST实现.例如,我希望服务器发送包含二进制plist而不是json的HTTP REsponse.服务器是Apache,安装了mod_python和django.考虑将bplist格式与json一起添加为输出格式,只是为了简化iPhone上的解析,以及减少数据传输.
我正在考虑编写自己的项目,但是对现有项目的贡献是可取的.
提前致谢.
有很多Linq算法只需要通过输入一次,例如Select.
然而,所有Linq扩展方法都位于IEnumerable而不是IEnumerator上
var e = new[] { 1, 2, 3, 4, 5 }.GetEnumerator();
e.Select(x => x * x); // Doesn't work
Run Code Online (Sandbox Code Playgroud)
这意味着您无法在任何正在读取"已打开"的流的情况下使用Linq.
对于我目前正在处理的项目,这种情况发生了很多 - 我想返回一个IEnumerator,其IDispose方法将关闭流,并让所有下游Linq代码对此进行操作.
简而言之,我有一个"已经打开"的结果流,我可以将其转换为适当的一次性IEnumerator - 但不幸的是,所有下游代码都需要IEnumerable而不是IEnumerator,即使它只会执行一次"传递".
即我想在各种不同的来源(CSV文件,IDataReaders等)上"实现"这种返回类型:
class TabularStream
{
Column[] Columns;
IEnumerator<object[]> RowStream;
}
Run Code Online (Sandbox Code Playgroud)
为了获得"列",我必须已经打开了CSV文件,启动了SQL查询,或者其他什么.然后我可以返回一个"IEnumerator",其Dispose方法关闭资源 - 但所有Linq操作都需要一个IEnumerable.
我所知道的最好的解决方法是实现一个IEnumerable,其GetEnumerator()方法返回唯一的IEnumerator,如果某些东西试图进行两次GetEnumerator()调用,则会抛出错误.
这一切听起来还不错,还是有更好的方式让我以一种易于使用Linq的方式实现"TabularStream"?
最近我遇到了这个术语,但我真的不知道它指的是什么.我在线搜索,但收益甚微.谢谢.
我创建了一个繁忙的指标 - 基本上是一个标志旋转的动画.我已将其添加到登录窗口并将Visibility属性绑定到我的viewmodel的BusyIndicatorVisibility属性.
当我单击登录时,我希望在登录发生时显示微调器(它调用Web服务来确定登录凭据是否正确).但是,当我将可见性设置为可见时,然后继续登录,在登录完成之前不会显示微调器.在Winforms旧式编码中,我会添加一个Application.DoEvents.如何让微调器出现在MVVM应用程序的WPF中?
代码是:
private bool Login()
{
BusyIndicatorVisibility = Visibility.Visible;
var result = false;
var status = GetConnectionGenerator().Connect(_model);
if (status == ConnectionStatus.Successful)
{
result = true;
}
else if (status == ConnectionStatus.LoginFailure)
{
ShowError("Login Failed");
Password = "";
}
else
{
ShowError("Unknown User");
}
BusyIndicatorVisibility = Visibility.Collapsed;
return result;
}
Run Code Online (Sandbox Code Playgroud)