在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它,这不是我正在寻找的.
在我的代码中,我有一个与 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 字节对齐吗?(除了将其包装在正确对齐的结构中之外)