所以,我有一个非常简单的用例; 我想从我的'今日工作'分支中压缩所有需要重新进入master的提交.
到目前为止,我一直在使用git rebase -i它,但它不能正常工作; 最终提交的时间戳不正确.
这是一个这样做的例子:
[work1] git checkout master
Switched to branch 'master'
[work1] git rebase today
First, rewinding head to replay your work on top of it...
Fast-forwarded master to today.
[work1] git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
5ad95ff Doug Wed Nov 7 10:12:42 2012 +0800 Updated TODO again
abb891c Doug Wed Nov 7 10:12:24 2012 +0800 Added more work
c5fd35c Doug Wed Nov 7 10:11:50 2012 +0800 Added more work
a98facd Doug Wed Nov 7 10:11:22 2012 …Run Code Online (Sandbox Code Playgroud) 我需要能够构建一个go应用程序的不同版本; 'debug'版本和普通版本.
这很容易做到; 我只是有一个const DEBUG,它控制着应用程序的行为,但是每次我需要在构建类型之间进行交换时都必须编辑配置文件.
我正在阅读关于go build(http://golang.org/pkg/go/build/)和标签,我想也许我可以这样做:
config.go:
// +build !debug
package build
const DEBUG = false
Run Code Online (Sandbox Code Playgroud)
config.debug.go:
// +build debug
package build
const DEBUG = true
Run Code Online (Sandbox Code Playgroud)
然后我应该能够使用"go build"或"go build -tags debug"进行构建,标签应该排除config.go并包含config.debug.go.
......但这不起作用.我明白了:
src/build/config.go:3:DEBUG在此块(<0>)中重新声明src/build/config.debug.go上的声明:3
我究竟做错了什么?
是否有其他更合适的#ifdef风格的方式我应该使用?
好的,我一直在阅读很多关于此的问题和答案,其中很多都是垃圾.
我有一个非常简单的问题.我该怎么做相当于这个:
require.config({
paths: {
"blah": '/libs/blah/blah',
}
});
require(['blah'], function(b) {
console.log(b);
});
Run Code Online (Sandbox Code Playgroud)
打字稿?
这不起作用:
declare var require;
require.config({
paths: {
"blah": '/libs/blah/blah',
}
});
import b = require('blah');
console.log(b);
s.ts(8,1): error TS2071: Unable to resolve external module ''blah''.
s.ts(8,1): error TS2072: Module cannot be aliased to a non-module type.
error TS5037: Cannot compile external modules unless the '--module' flag is provided.
Run Code Online (Sandbox Code Playgroud)
使用--module标志进行编译,使用虚拟blah.ts shim编译,但输出为:
define(["require", "exports", 'blah'], function(require, exports, b) {
require.config({
paths: {
"blah": '/libs/blah/blah'
}
});
console.log(b); …Run Code Online (Sandbox Code Playgroud) 这是一个有争议的话题,所以让我先解释一下我的用例,然后再谈谈实际问题.
我发现对于一堆不安全的东西,确保你不泄漏记忆是很重要的; 如果你开始使用transmute()和,这实际上很容易做到forget().例如,将盒装实例传递给C代码一段任意时间,然后将其取回并使用"恢复它" transmute.
想象一下,我有这种API的安全包装:
trait Foo {}
struct CBox;
impl CBox {
/// Stores value in a bound C api, forget(value)
fn set<T: Foo>(value: T) {
// ...
}
/// Periodically call this and maybe get a callback invoked
fn poll(_: Box<Fn<(EventType, Foo), ()> + Send>) {
// ...
}
}
impl Drop for CBox {
fn drop(&mut self) {
// Safely load all saved Foo's here and discard them, preventing memory leaks
} …Run Code Online (Sandbox Code Playgroud) 在分发应用程序以将所有鸡蛋组合成单个zip文件时会很方便,这样您需要分发的只是一个zip文件和一个可执行文件(一些自定义二进制文件只需启动,加载zip文件的主要功能并踢出python关闭或类似).
我已经看过一些关于在线做这个的讨论,但没有关于如何实际做到这一点的例子.
我知道你可以(如果它的zip安全)将鸡蛋转换为zip文件.
我不确定的是:
你能以某种方式将所有鸡蛋合并成一个zip文件吗?如果是这样,怎么样?
你将如何加载和运行特定鸡蛋的代码?
你如何确保该蛋中的代码可以访问所有依赖项(即zip文件中的其他蛋)?
人们会问很多这样的东西并得到答案; 使用py2exe.是的,我明白了,这是一个解决方案.这不是我在这里问的问题......
我不明白为什么ResultRust会存在.我可以看到它是如何Option有用的,但使用Result似乎不必要地使代码复杂化.
请考虑以下示例:
#[derive(PartialEq, Eq, Debug)]
enum MyErr {
None,
FailOne,
}
fn returns_tuple() -> (u8, MyErr) {
// (1, None) // <-- Success path
(0, MyErr::FailOne)
}
fn returns_result() -> Result<u8, MyErr> {
// Ok(1) // <-- Success path
Err(MyErr::FailOne)
}
#[test]
fn test_check_return_values() {
let x = returns_result();
if x.is_ok() {
println!("result: Is OK: {}", x.unwrap()); // <-- Must use unwrap
} else {
match x.err().unwrap() { // <-- Again, unwrapping
MyErr::None => …Run Code Online (Sandbox Code Playgroud) 如何Option从调用者的特定生命周期中提取引用并将其传回?
具体而言,我想借用参照Box<Foo>从Bar一个具有Option<Box<Foo>>在其中.我以为我能做到:
impl Bar {
fn borrow(&mut self) -> Result<&Box<Foo>, BarErr> {
match self.data {
Some(e) => Ok(&e),
None => Err(BarErr::Nope),
}
}
}
Run Code Online (Sandbox Code Playgroud)
......但结果是:
error: `e` does not live long enough
--> src/main.rs:17:28
|
17 | Some(e) => Ok(&e),
| ^ does not live long enough
18 | None => Err(BarErr::Nope),
19 | }
| - borrowed value only lives until here
|
note: borrowed value must be valid for the …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个在C中进行DI的良好技术解决方案.
我已经在这里看到了一些DI问题,但我没有看到任何实际的例子或具体的实施建议.
所以,假设我们有以下情况:
我们在c中有一组模块; 我们想重构这些模块,以便我们可以使用DI来运行单元测试等等.
每个模块实际上由一组c函数组成:
module_function(...);
模块相互依赖.IE浏览器.通常,您可能会打电话,例如:
int module1_doit(int x) {
int y = module2_dosomethingelse(x);
y += 2;
return(y);
}
Run Code Online (Sandbox Code Playgroud)
DI的正确方法是什么?
可能的解决方案似乎是:
(1)为所有模块函数使用函数指针,并在调用函数时执行此(或类似):
int y = modules-> module2-> dosomethingelse(x);
(2)使用相同的符号编译多个库(mock,std等),并在正确的实现中动态链接.
(2)似乎是正确的方法,但是很难配置并且烦人地迫使你为每个单元测试构建多个二进制文件.
(1)似乎它可能会起作用,但在某些时候你的DI控制器会陷入需要动态调用通用工厂函数(void ( factory)(...)说)的情况下需要在运行时注入的其他模块?
在c中还有另一种更好的方法吗?
这样做的"正确"方法是什么?
所以这段代码:
from inspect import *
class X(object):
def y(self):
pass
methods = getmembers(X, predicate=ismethod)
functions = getmembers(X, predicate=isfunction)
print("%r" % methods)
print("%r" % functions)
Run Code Online (Sandbox Code Playgroud)
从python2.7产生:
[('y', <unbound method X.y>)]
[]
Run Code Online (Sandbox Code Playgroud)
并从python3.3产生:
[]
[('y', <function X.y at 0x1006ee3b0>)]
Run Code Online (Sandbox Code Playgroud)
我已经四处寻找,但我看不出任何明显的行为改变的原因.
具体来说,为什么python 3将我的方法视为一个函数?
是否有任何跨运行时方式获取类的方法列表?
(即在python2.X和3.X上运行时返回相同内容的东西)
编辑:getmembers()示例不起作用:
from inspect import *
class X(object):
def y(self):
pass
methods = getmembers(X)
for i in methods:
if ismethod(i):
print("Method: %s" % str(i))
else:
print("Not a method: %s" % str(i))
Run Code Online (Sandbox Code Playgroud)
打印:
Not a method: ('__class__', <attribute '__class__' of …Run Code Online (Sandbox Code Playgroud) 在javascript中你可以这样做:
function Test() {
this.id = 1;
};
Test.prototype.customize = function(key, callback) {
this[key] = callback;
};
var callback = function() { alert(this.id); };
var x = new Test();
x.customize('testing', callback);
x.testing();
Run Code Online (Sandbox Code Playgroud)
你能用打字稿做类似的事吗?
特别是我有兴趣有一个类:
class Socket {
...
}
class Sockets {
public addChannel(name:string):void {
this[name] = new Socket();
}
...
}
data = new Sockets();
data.addChannel('video');
data.addChannel('audio');
...
var audio = data.audio.read();
var video = data.video.read();
etc.
Run Code Online (Sandbox Code Playgroud)
编译器抱怨"套接字"上没有"音频"或"视频"成员,并且不会编译.有没有办法解决这个问题,而无需手动定义容器类的属性?
我知道它有点类步骤静态类型规则,但我发现偶尔有用的API很好有这样的东西.
编辑:请参阅我在下面发布的示例答案; 类似的东西.我仍然会接受任何聪明的答案,让我以某种方式设法编译一些对基础对象本身有用的东西.