我正在尝试将Data.Binary.PutM monad修改为monad转换器.所以我从changin的定义开始
newtype PutM a = Put { unPut :: PairS a }Run Code Online (Sandbox Code Playgroud)
至
newtype PutM a = Put { unPut :: Identity (PairS a) }Run Code Online (Sandbox Code Playgroud)
然后我当然改变了return和>> =函数的实现:
从:
return a = Put $ PairS a mempty
{-# INLINE return #-}
m >>= k = Put $
let PairS a w = unPut m
PairS b w1 = unPut (k a)
in PairS b (w `mappend` w1)
{-# INLINE (>>=) #-}
m >> k = Put …Run Code Online (Sandbox Code Playgroud) 我们正在为Android开发一个独立游戏,并希望用户选择他的昵称.我们选择使用NDK提供的Native Activity,因为这似乎是最简单的方法.
我们用键盘遇到的第一个问题是,该功能ANativeActivity_showSoftInput()似乎做什么都没有(如例如这里),所以我们使用JNI调用函数调出键盘:
static void showKeyboard(Activity activity) {
String s = Context.INPUT_METHOD_SERVICE;
InputMethodManager m = (InputMethodManager)activity.getSystemService(s);
View w = activity.getWindow().getDecorView();
m.showSoftInput(w, 0);
}
Run Code Online (Sandbox Code Playgroud)
这适用于调出键盘,并且可以在一些设备上一起正常工作.但在其他设备(例如Nexus 7)上,当用户尝试通过点击"隐藏键盘"按钮关闭键盘时,应用程序会冻结此调试输出:
I/InputDispatcher( 453): Application is not responding: AppWindowToken{429b54a8 token=Token{42661288 ActivityRecord{41bb0b00 u0 com.example.project/android.app.NativeActivity}}} - Window{420d6138 u0 com.example.project/android.app.NativeActivity}. It has been 5006.7ms since event, 5005.6ms since wait started. Reason: Waiting because the focused window has not finished processing the input events that were previously delivered to it.
I/WindowManager( 453): Input event dispatching timed out sending to …Run Code Online (Sandbox Code Playgroud) 我有两个对象,第二个对象要求第一个对象比它更长,因为它包含对第一个对象的引用.我需要将它们都移动到一个线程中,但编译器抱怨第一个没有足够长的时间.这是代码:
use std::thread;
trait Facade: Sync {
fn add(&self) -> u32;
}
struct RoutingNode<'a> {
facade: &'a (Facade + 'a),
}
impl<'a> RoutingNode<'a> {
fn new(facade: &'a Facade) -> RoutingNode<'a> {
RoutingNode { facade: facade }
}
}
fn main() {
struct MyFacade;
impl Facade for MyFacade {
fn add(&self) -> u32 {
999u32
}
}
let facade = MyFacade;
let routing = RoutingNode::new(&facade);
let t = thread::spawn(move || {
let f = facade;
let r = routing;
});
t.join(); …Run Code Online (Sandbox Code Playgroud) 在堆栈上进行分配时,我不必一定要知道在编译时分配的C数组的大小。即我可以做到这一点:
void foo(size_t s) {
uint8_t bar[s]; // `s` not known at compile time
some_func_that_uses_bar(bar, sizeof(bar));
}
Run Code Online (Sandbox Code Playgroud)
但是,为了减少出错的可能性,我觉得我也应该可以使用C ++来做到这一点std::array,但是我还无法弄清楚该怎么做(也不知道是否可能)。
android ×1
android-ndk ×1
c++ ×1
haskell ×1
lifetime ×1
memory-leaks ×1
monads ×1
reference ×1
rust ×1