小编Ber*_*ers的帖子

是否可以从闭包创建一个命名函数?

在PHP中,您可以使用以下命名函数:

function foo()
{
   return "bar";
}
Run Code Online (Sandbox Code Playgroud)

你可以有这样的闭包:

$foo = function() {
    return "bar";
};
Run Code Online (Sandbox Code Playgroud)

闭包非常棒且易于创建,但遗憾的是我需要使用的库真的需要一个命名函数.是否可以动态地从闭包创建命名函数?即不提前在代码中定义所有函数,但更像是register_function($name, callable $closure).

我知道create_function,但是那个将PHP字符串作为函数体并且只是eval它,这不是我正在寻找的.

php

15
推荐指数
2
解决办法
1161
查看次数

如何在 Rust 中过度对齐变量?

在我的代码中,我有一个与 1 字节对齐的类型,以及一个需要与 8 字节对齐的类型的函数。以下假设的代码显示了这种用法:

fn use_bar(bar: &mut [u64; 25]) {
    unimplemented!()
}

fn main() {
    let mut foo: [u8; 200] = get_foo();

    unsafe {
        // Option 1
        use_bar(mem::transmute::<&mut [u8; 200], &mut [u64; 25]>::(&mut foo));
        // Option 2
        use_bar(&mut *(&mut foo as *mut [u8; 200] as *mut [u64; 25]));
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这并不一定有效。如果你向 Clippy 询问第一个选项,它会告诉你改变引用是一件坏事。选项 2 可能有效,但是,它会告诉您对齐要求[u64; 25](8 字节对齐)比[u8; 200](1 字节对齐)更严格,因此这可能会导致未定义的行为。

由于我不控制 返回的类型get_foo(),有什么方法可以强制foo8 字节对齐吗?(除了将其包装在正确对齐的结构中之外)

pointers rust

2
推荐指数
1
解决办法
2336
查看次数

标签 统计

php ×1

pointers ×1

rust ×1