假设我有一个像这样的C#结构:
[StructLayout(LayoutKind.Explicit)]
struct IMAGE_DOS_HEADER {
[FieldOffset(60)] public int e_lfanew;
}
Run Code Online (Sandbox Code Playgroud)
现在假设我从文件中读取数据,如下所示:
byte[] data = new byte[4096];
FileStream f = new FileInfo(filename).Open(FileMode.Open, FileAccess.Read);
int n = f.Read(data, 0, 4096);
Run Code Online (Sandbox Code Playgroud)
现在我想测试n以确保我已经读取了足够的字节来获取值e_lfanew.有没有什么办法可以获得值60(FieldOffset)而无需重新输入?我正在寻找这样的东西:
if (n >= offsetof(IMAGE_DOS_HEADER.e_lfanew) + sizeof(int)) {
...
}
Run Code Online (Sandbox Code Playgroud)
有这样的命令吗?在我的实际代码中,我必须进行其中几个测试,并且通过在结构中添加先前字段或通过从FieldOffset属性中复制值来手动输入数字似乎很乏味且容易出错.有没有更好的办法?
当使用具有运算符重载的类时,我从简单的辅助方法获得编译错误.这是一个独立的测试(从我的真实代码简化,但仍然证明了问题):
use std::ops::{Add, Sub, Neg, Mul, Div};
#[derive(Debug, Eq, PartialEq)]
pub struct Money {
cents: i64,
}
impl Money {
pub fn new(cents: i64) -> Money {
Money { cents: cents }
}
}
impl Add for Money {
type Output = Money;
fn add(self, other: Money) -> Money {
Money { cents: self.cents + other.cents }
}
}
impl Mul<Money> for f64 {
type Output = Money;
fn mul(self, rhs: Money) -> Money {
Money { cents: (self * …Run Code Online (Sandbox Code Playgroud) 我有这个枚举:
enum ImageType {
Png,
Jpeg,
Tiff,
}
Run Code Online (Sandbox Code Playgroud)
有没有办法匹配前两个中的一个,并将匹配的值绑定到变量?例如:
match get_image_type() {
Some(h: ImageType::Png) | Some(h: ImageType::Jpeg) => {
// Lots of shared code
// that does something with `h`
},
Some(ImageType::Tiff) => { ... },
None => { ... },
}
Run Code Online (Sandbox Code Playgroud)
该语法不起作用,但有没有呢?
我正在使用Visual Studio 2008构建一个包含两个项目的解决方案:C#Console应用程序和C++ DLL.我希望应用程序使用P/Invoke从dll调用函数.因此,我正在尝试将dll添加为C#应用程序的参考.但是当我尝试添加引用命令时,Visual Studio将不允许我这样做,除非我在dll上设置/ clr属性(在Configuration Properties:General下).现在,我认为P/Invoke可以处理普通的win32 dll.实际上,如果我在没有/ clr的情况下构建我的dll并且只是手动将它复制到bin/Debug,那么应用运行正常.那么为什么/ clr需要添加dll作为参考?如果VS不允许我添加它,是否有一些(干净的)解决方法,以便我的应用程序找到DLL?
我看到有人在这里有类似的问题(虽然有第三方dll): 无法添加DLL参考VS 2008他得到的答案是构建一个包装器.但这并不是必需的,因为应用程序可以使用dll就好了; 它只是添加引用步骤不起作用.此外,包装器代码是否需要引用dll,引发与以前相同的问题?我真的很喜欢一个不涉及编写包装器的答案.
我知道通过键入@@我执行最后一个@命令.但任何人都可以解释@@下面代码中的内容(在vim帮助文件中找到)?:
function! CountSpaces(type, ...)
let sel_save = &selection
let reg_save = @@
if a:0
silent exe "normal! `<" . a:type . "`>y"
elseif a:type == 'line'
silent exe "normal! '[V']y"
elseif a:type == 'block'
silent exe "normal! `[\<C-V>`]y"
else
silent exe "normal! `[v`]y"
endif
echomsg strlen(substitute(@@, '[^ ]', '', 'g'))
let &selection = sel_save
let @@ = reg_save
endfunction
Run Code Online (Sandbox Code Playgroud)
它似乎是一个寄存器,但它不在列表中:help registers.从读取代码我猜它是yanking/deletion的默认寄存器?这记录在哪里?我的所有搜索只会产生@@执行最后一个@命令的习惯用法.
使用Paperclip,我想从这样的URL中获取图像:
require 'open-uri'
user.photo = open(url)
Run Code Online (Sandbox Code Playgroud)
问题是我最后会找到像'open-uri20110915-4852-1o7k5uw'这样的文件名.有什么办法可以在user.photo上更改文件名吗?
作为一个额外的转折,Paperclip将我的文件存储在S3上,所以如果我可以在初始分配中设置我想要的文件名,那就更好了,所以图像上传到正确的S3密钥.像这样的东西:
user.photo = open(url), :filename => URI.parse(url).path
Run Code Online (Sandbox Code Playgroud) 我有一个带有序列化Hash属性的Rails模型类,如下所示:
class Action
serialize :metadata, Hash
# . . .
end
Run Code Online (Sandbox Code Playgroud)
该列存储在text具有YAML编码的列中.问题是,当我将metadata值传递给create!方法时,散列键会从符号转换为字符串,但这种转换不会在其他时间发生.例如:
$ rails console
> a = Action.create!(:metadata => {:foo => "bar"})
> a.metadata
=> {"foo"=>"bar"}
> a.metadata[:fizz] = "buzz"
> a.metadata
=> {"foo"=>"bar", :fizz=>"buzz"}
Run Code Online (Sandbox Code Playgroud)
现在,当我保存模型时,数据库将具有此文本值:
---
foo: bar
:fizz: buzz
Run Code Online (Sandbox Code Playgroud)
有任何建议如何解决这个问题?
(这是使用Rails 3.0.16.)
我通常在我的Rspec测试中写这样的东西:
user.new(...)
user.should be_valid
Run Code Online (Sandbox Code Playgroud)
问题是,当测试失败时,我无法看到用户对象上的错误.有没有一种很好的方法来重新编写这个测试,以便在Rspec输出中我会看到类似的东西user.errors.inspect?我试过了user.errors.should be_empty,但那仍然只是说"预期是真的,变得虚假".
我正在尝试使用MySQL命令show indexes from table_name找出哪些索引是唯一的.但它错误地报告所有索引都是非唯一的:
mysql> desc books;
+------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(255) | YES | | NULL | |
| author_id | int(11) | YES | | NULL | |
| coauthor_id | int(11) | YES | | NULL | |
| publisher_id | int(11) | YES | | NULL | | …Run Code Online (Sandbox Code Playgroud) 如何在Perl中编写测试以查看我的文件是直接运行还是从其他来源导入?我想这样做可以很容易地将所有内容捆绑在一个文件中,但仍然可以针对这些函数编写单元测试.我的想法是有这样的事情:
if (running_directly()) {
main();
}
def main {
this();
that();
}
def this {
# ...
}
def that {
# ...
}
Run Code Online (Sandbox Code Playgroud)
然后在一个单独的perl脚本中,我可以加载原始文件并调用它作为单元测试.
我记得以前见过这个,但我不记得怎么做了.我想避免针对某个已知值测试$ 0,因为这意味着用户无法重命名脚本.