小编EFT*_*FTH的帖子

Haskell - 声明多个函数的类型

我经常发现自己编写了同一类型的多个函数.我们称之为这种类型FuncType.我可能写这样的东西:

funcA :: FuncType
funcB :: FuncType
funcC :: FuncType
funcD :: FuncType

-- Implementations
Run Code Online (Sandbox Code Playgroud)

这感觉就像许多不必要的打字一样(键入键盘时键入,而不是声明功能类型).有没有办法更简洁地做到这一点?我想要的东西看起来像是:

(funcA, funcB, funcC, funcD) :: FuncType

-- Implementations
Run Code Online (Sandbox Code Playgroud)

我真的试图谷歌这个,但我空了.如果这不是该语言的一个特征,为什么不呢?我错过了什么吗?如果我发现自己需要这个,我会做错吗?

haskell types declaration

13
推荐指数
1
解决办法
616
查看次数

使用Rust FFI时如何初始化不透明的C结构?

这是我想用C代码做的事情:

#include <some_lib.h>
int main() {
    some_lib_struct_t x;
    some_lib_func(&x);
}
Run Code Online (Sandbox Code Playgroud)

如何在Rust中使用库?这是我到目前为止所得到的:

extern crate libc; // 0.2.51

struct some_lib_struct_t;

#[link(name = "some_lib")]
extern "C" {
    fn some_lib_func(x: *mut some_lib_struct_t);
}

fn main() {
    let mut x: some_lib_struct_t;
    unsafe {
        some_lib_func(&mut x);
    }
}
Run Code Online (Sandbox Code Playgroud)

编译时我(不是那么令人惊讶)得到错误:__CODE__.

编辑

在阅读Shepmaster的回答后,我仔细查看了图书馆的标题.就像他们说的那样,__CODE__只是一个指向的指针的typedef __CODE__.我做了以下更改:

error[E0381]: borrow of possibly uninitialized variable: `x`
  --> src/main.rs:13:23
   |
13 |         some_lib_func(&mut x);
   |                       ^^^^^^ use of possibly uninitialized `x`
Run Code Online (Sandbox Code Playgroud)

它的工作原理!但是我收到了警告__CODE__.这是我可以压制的东西还是我需要改变一些东西?

ffi rust

9
推荐指数
1
解决办法
1963
查看次数

具有策略模式的单例

这是策略界面的外观

public interface Strategy
{
    public void doStuff(Object o);
}
Run Code Online (Sandbox Code Playgroud)

这是一个可能的实现

public class StrategyImpl implements Strategy
{
    @Override
    public void doStuff(Object o)
    {
        //Do things with o
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,使用StrategyImpl实现可能有数百个对象。应该为所有这数百个对象创建一个StrategyImpl的新实例,还是有更好的方法?
我在这里已经读过,不应使用单例来节省内存,但是似乎没有必要创建数百个相同的实例。也许最好的解决方案不是单例,而是某种方式。

我应该如何制定策略?我是否应该不理会这些类型的问题?

java singleton strategy-pattern

6
推荐指数
1
解决办法
1509
查看次数

标签 统计

declaration ×1

ffi ×1

haskell ×1

java ×1

rust ×1

singleton ×1

strategy-pattern ×1

types ×1