小编w.b*_*ian的帖子

静态可变数据的惯用替代方法是什么?

我正在使用 Iron 框架来创建一个简单的端点。我有端点需要访问的有状态的可变数据。

这是一些显示我意图的代码:

extern crate iron;
extern crate mount;

use iron::{Iron, Request, Response, IronResult};
use iron::status;
use mount::Mount;

static mut s_counter: Option<Counter> = None;

struct Counter {
    pub count: u8
}

impl Counter {
    pub fn new() -> Counter {
        Counter {
            count: 0
        }
    }

    pub fn inc(&mut self) {
        self.count += 1;
    }
}

fn main() {
    unsafe { s_counter = Some(Counter::new()); }
    let mut mount = Mount::new();
    mount.mount("/api/inc", inc);
    println!("Server running on http://localhost:3000");
    Iron::new(mount).http("127.0.0.1:3000").unwrap();
}

fn …
Run Code Online (Sandbox Code Playgroud)

iron rust

3
推荐指数
1
解决办法
883
查看次数

为什么返回Result的函数总是返回Err?

我在浏览Serde源时遇到了这个missing_field函数:

/// Report that the struct has a field that wasn't deserialized
fn missing_field<V>(&mut self, field: &'static str) -> Result<V, Self::Error>
    where V: Deserialize,
{
    Err(Error::missing_field(field))
}
Run Code Online (Sandbox Code Playgroud)

为什么这有用?为什么Result要无条件地返回Err

rust

3
推荐指数
1
解决办法
85
查看次数

在非泛型结构上调用特定的trait实现

我有一个实现通用特征的非泛型结构.当我在struct上调用一个函数时,我收到以下错误:

error[E0282]: unable to infer enough type information about `_`
  --> src/main.rs:35:18
   |
35 |     cpu.debugger.attach();
   |                  ^^^^^^ cannot infer type for `_`
   |
   = note: type annotations or generic parameter binding required
Run Code Online (Sandbox Code Playgroud)

我已经尝试添加类型注释和泛型参数绑定,但我显然做错了什么; 我仍然无法编译.我在其他地方有一个类似的代码,它有一个通用的结构,可能是因为struct和trait impl共享的泛型边界允许编译器推断要调用的实际方法实现.

说明问题的最佳方法是使用简化示例:

struct Cpu<M: Memory, D: Debugger<M>> {
    mem: M,
    debugger: D,
}

impl<M: Memory, D: Debugger<M>> Cpu<M, D> {
    fn new(mem: M, debugger: D) -> Self {
        Cpu {
            mem: mem,
            debugger: debugger,
        }
    }
}

trait Memory {}

struct SimpleMemory;

impl Memory for …
Run Code Online (Sandbox Code Playgroud)

traits rust

3
推荐指数
1
解决办法
292
查看次数

克隆固定大小数组的最有效方法是什么?

我有一个结构,它由一个具有 65536 个元素的固定大小的字节数组组成。

Clone天真地在我的结构上实现了 - 我创建了一个新数组并循环遍历原始数组,一次一个复制每个元素。有没有更有效或惯用的方法来做到这一点,基本上可以归结为 a memcpy

rust

3
推荐指数
1
解决办法
512
查看次数

如何使用Arc <Mutex <MyStruct <T >>>在线程之间共享通用结构?

我有一些可变的状态,我需要在线程之间共享.我按照Rust书的并发部分,它在线程之间共享一个向量并对其进行变异.

我需要共享最终单形化的通用结构,而不是向量.这是我正在尝试的一个提炼的例子:

use std::sync::{Arc, Mutex};
use std::thread;
use std::time::Duration;
use std::marker::PhantomData;

trait Memory {}

struct SimpleMemory;

impl Memory for SimpleMemory {}

struct SharedData<M: Memory> {
    value: usize,
    phantom: PhantomData<M>,
}

impl<M: Memory> SharedData<M> {
    fn new() -> Self {
        SharedData {
            value: 0,
            phantom: PhantomData,
        }
    }
}

fn main() {
    share(SimpleMemory);
}

fn share<M: Memory>(memory: M) {
    let data = Arc::new(Mutex::new(SharedData::<M>::new()));

    for i in 0..3 {
        let data = data.clone();
        thread::spawn(move || {
            let mut data = …
Run Code Online (Sandbox Code Playgroud)

rust

3
推荐指数
1
解决办法
1125
查看次数

为什么具有匿名struct字段的结构不满足在该类型的别名上定义的方法?

我有一个在我的包外面定义的结构,我想附加一个方法.由于包是反映原始类型的事实,我不能在我的结构中使用别名,我必须使用原始类型.以下基本上是我想要做的:

package main

import "fmt"

type Entity struct {
    loc_x int
    loc_y int
}

type Player struct {
    Entity
    name string
}

type Alias Entity

func (e Alias) PrintLocation() {
    fmt.Printf("(%v, %v)", e.loc_x, e.loc_y)
}

func main() {
    player := new(Player)
    player.PrintLocation()
}
Run Code Online (Sandbox Code Playgroud)

试图编译这会导致type *Player has no field or method PrintLocation.如果我定义了PrintLocation()方法Entity,它就可以了.如果Alias并且Entity是完全相同的,为什么编译器会抱怨?

go

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

垃圾收集器可以安全地使用纯粹的,功能性的,急切评估的语言做出什么样的假设?

澄清一下这个问题:

垃圾收集器(例如JVM使用的垃圾收集器)由于它们支持的语言的性质而涉及很多复杂性.与JVM垃圾收集器相比,为纯粹的,功能性的,热切评估的编程语言而构建的垃圾收集器将进行哪些简化?

garbage-collection jvm functional-programming

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

从DOM中删除元素

我正在创建一个div元素并将其添加到body元素,然后尝试删除该元素.这个缩写代码说明了我正在尝试做的事情:

//create div
_backdropDiv = new DivElement();

//add div to body, this works as expected
window.document.query('body').elements.add(_backdropDiv);

//in some other method...
var body = window.document.query('body');

//it's odd the List<E> doesn't specify a remove method, we'll jump through some hoops...
var backdropIndex = body.elements.indexOf(_modalDiv);
body.elements.removeRange(backdropIndex, 1); //<--- NotImplementedException
Run Code Online (Sandbox Code Playgroud)

因此,从DOM中删除此元素的最明显方法不起作用,因为未实现removeRange.我应该另辟蹊径吗?

在一个不相关的说明,为什么没有remove()指定方法List<E>?必须执行两个操作(indexOf(),removeRange())似乎很笨拙.

dart

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


useShadowDom = false时查询组件的子元素

我正在使用useShadowDom: false我的组件试图支持更多的浏览器,而不必使用麻烦的web_components polyfill.启用shadow DOM后,我会做这样的事情:

void onShadowRoot(ShadowRoot root) {
  root.querySelector('.btn-go-back').onClick.listen((e) {
    if (goBackHandler != null) {
      goBackHandler();
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

onShadowRoot我的组件模板加载运行,因此DOM中存在所有组件元素.如果没有启用Shadow DOM,我会在构造函数中注入组件的根元素,并执行以下操作:

MyComponent(this._root){
  _root.querySelector('.btn-go-back').onClick.listen((e) {
    if (goBackHandler != null) {
      goBackHandler();
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为组件的模板尚未加载到DOM中,因此根元素还没有任何子查询.

我已经尝试实现AttachAware,并查询方法中的根元素attach(),并且此时也没有加载模板.

所以,如果我没有使用shadow DOM,我怎么知道模板何时加载到DOM中,这样我才能查询组件中的元素?

编辑

如果您尝试查询提供的对象,则尝试使用ShadowRootAware和将导致以下错误:onShadowRootuseShadowRoot: falseShadowRoot

Unsupported operation: Not supported

STACKTRACE:
#0      EmulatedShadowRoot._notSupported     (package:angular/core_dom/emulated_shadow_root.dart:5:21) 
#1      EmulatedShadowRoot.querySelector (package:angular/core_dom/emulated_shadow_root.dart:32:63)
Run Code Online (Sandbox Code Playgroud)

我也尝试了以下组合:

  • 在构造函数中注入根元素和
  • 查询工作中的根元素onShadowRoot,有点,但现在我在控制台输出中看到这个:

[WebPlatformShim] WARNING: Failed to set up Shadow DOM shim for …
Run Code Online (Sandbox Code Playgroud)

dart angular-dart

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

在片段着色器中读取自定义纹理格式

我正在创建一个NES模拟器,我正在尝试将功能(如果适用)卸载到GPU.令我印象深刻的一个想法是以自定义格式将屏幕像素输出到缓冲区,其方式是对每个像素的属性进行编码,以便着色器可以确定如何显示它们.这将从模拟器中最热门的功能之一卸载相当多的逻辑/分支.

以下是使用每像素2个字节对​​单个像素进行编码的示例:

字节1(调色板索引):bbbb ssss

  • b:背景像素调色板索引
  • s:精灵像素调色板索引

字节2(像素属性):bbss rgbp

  • b:2位背景像素值
  • s:2位精灵像素值
  • r:强调红色
  • g:强调绿色
  • b:强调蓝色
  • p:精灵像素优先级

我对编写着色器比较新,所以我的第一个问题是:这甚至可能吗?在我所做的研究中,似乎纹理需要采用特定的格式才能从每个像素中读取颜色信息,而我的自定义2字节"颜色"格式甚至不代表颜色 - 而且它本身.如果可能的话,可以采取什么样的高级方法来实现这一目标?我计划使用vulkan,但任何更普遍适用的方法(因为它与着色器有关)都是受欢迎的.

opengl shader vulkan

0
推荐指数
1
解决办法
187
查看次数