小编le_*_*_me的帖子

如何在sinatra中引发自定义错误代码?

我在我的sinatra应用程序中执行了以下操作:

disable :show_exceptions
disable :raise_errors

error do
  haml :error, :locals => {:error_message => request.env['sinatra.error'].to_s}
end

get '/error' do
  raise "ERROR!!"
end
Run Code Online (Sandbox Code Playgroud)

如果我访问/error我得到一个500 - Internal Server Error响应代码,这是上帝和想要的.但是如何将代码更改为404或501?

答案:

disable :show_exceptions
disable :raise_errors

get '/error' do
  halt(404,haml(:error, :locals => {:error_message => request.env['sinatra.error'].to_s}))
end
Run Code Online (Sandbox Code Playgroud)

ruby error-handling sinatra

27
推荐指数
2
解决办法
2万
查看次数

我如何实现一个我不拥有的特性我没有的类型?

我想实现这个Shl特性Vec,代码如下.这会使事情变得vec << 4可能,这对于它来说是个不错的选择vec.push(4).

use std::ops::Shl;

impl<T> Shl<T> for Vec<T> {
    type Output = Vec<T>;

    fn shl(&self, elem: &T) -> Vec<T> {
        self.push(*elem);
        *self
    }
}

fn main() {
    let v = vec![1, 2, 3];
    v << 4;
}
Run Code Online (Sandbox Code Playgroud)

编译失败,出现以下错误:

无法提供扩展实现,其中特征和类型都未在此包中定义[E0117]

要么

type参数T必须用作某些本地类型的类型参数(例如MyStruct<T>); 只有当前包中定义的特征才能为类型参数实现[E0210]

据我了解,我必须修补stdlib,更具体地来说是collections::vec板条箱.有没有其他方法可以更改此代码以成功编译?

traits rust

25
推荐指数
3
解决办法
3230
查看次数

如何从一个范围创建一个Vec并将其洗牌?

我有以下代码:

extern crate rand;

use rand::{thread_rng, Rng};

fn main() {
    let mut vec: Vec<u32> = (0..10).collect();
    let mut slice: &[u32] = vec.as_mut_slice();

    thread_rng().shuffle(slice);
}
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

error[E0308]: mismatched types
 --> src/main.rs:9:26
  |
9 |     thread_rng().shuffle(slice);
  |                          ^^^^^ types differ in mutability
  |
  = note: expected type `&mut [_]`
             found type `&[u32]`
Run Code Online (Sandbox Code Playgroud)

我想我明白向量和切片的内容是不可变的,这会导致错误,但我不确定.

签名as_mut_slicepub fn as_mut_slice<'a>(&'a mut self) -> &'a mut [T],所以切片应该是可变的,但它不知何故.

我知道必须有一个简单的解决办法,但我尽我所能,无法让它发挥作用.

iterator immutability mutability rust

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

如何从函数返回Filter迭代器?

我想要这样的东西:

fn filter_one<'a, T: Int>(input: &'a Vec<T>) -> ??? {
    input.iter().filter(|&x| x == Int::one())
}
Run Code Online (Sandbox Code Playgroud)

该函数的返回类型是什么?(我想要返回Iterator)

(我希望这不是太明显,我现在已经尝试了半个小时而且开始感到沮丧:p)

编辑:

我试着按照这里 =>游戏围栏链接的说明操作

编译器给我以下错误:

<anon>:5:1: 7:2 error: the trait `core::kinds::Sized` is not implemented for the type `for<'r> core::ops::Fn(&'r T) -> bool + 'a`
<anon>:5 fn filter_one<'a, T: Int>(input: &'a Vec<T>) -> Filter<&T, Iter<'a, T>, Fn(&T) -> bool>{
<anon>:6     input.iter().filter(|&x| x == Int::one())
<anon>:7 }
<anon>:5:1: 7:2 note: required by `core::iter::Filter`
<anon>:5 fn filter_one<'a, T: Int>(input: &'a Vec<T>) -> Filter<&T, Iter<'a, …
Run Code Online (Sandbox Code Playgroud)

generics iterator rust

25
推荐指数
2
解决办法
3093
查看次数

我如何自己使用Rust解析器(libsyntax)?

我想使用Rust解析器(libsyntax)来解析Rust文件并从中提取函数名称等信息.我开始深入研究文档和代码,所以我的第一个目标是在.rs文件中打印独立函数的所有函数名称.

程序应该在打印函数名之前扩展所有宏,因此不会遗漏通过宏声明的函数.这就是为什么我不能自己写一些蹩脚的小解析器来完成这项工作.

我不得不承认我还不是很擅长编程Rust,所以我提前为这个问题中的任何愚蠢的陈述道歉.

我是如何理解的,我需要执行以下步骤:

  1. 通过struct解析文件Parser
  2. 用.展开宏 MacroExpander
  3. ???
  4. 用a Visitor来走AST并提取我需要的信息(例如via visit_fn)

所以这是我的问题:

  1. 我该怎么用MacroExpander
  2. 如何使用自定义访问者浏览扩展的AST?

我有想法使用自定义lint检查而不是完全成熟的解析器.我在调查这个选项.

如果重要,我正在使用 rustc 0.13.0-nightly (f168c12c5 2014-10-25 20:57:10 +0000)

parsing abstract-syntax-tree rust

7
推荐指数
2
解决办法
1930
查看次数

GtkGLArea 小部件 (GTK+) 的 Vulkan 等价物是什么?

背景:我想编写一个 CAD 应用程序。我想用 Vulkan 实现所有渲染。我想使用 GTK+。

我不想要一个(可见的)不同窗口用于对象的渲染图像。

所以我研究并找到了这个GtkGLArea小部件,它似乎可以做我想要的,但是对于 OpenGL。

有等价于GTKGLArea吗?如果没有,是否有另一种方法来实现我的想法?

gtk gtk3 vulkan

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

为什么rubys public和private关键字/方法返回Object?

这个片段:

a = private
p a
p a.class
Run Code Online (Sandbox Code Playgroud)

给我:

Object
Class
Run Code Online (Sandbox Code Playgroud)

我不知道是否privatepublic是关键字或方法在Ruby中,但是,为什么他们返回Object(我指的是类)?这种奇怪的行为有历史或实际原因吗?

我用Ruby 2.1,Rubinius 2.2.6和JRuby 1.7.12测试了这个.

ruby

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

如何从DataMapper :: Collection获取原始SQL?

我正在使用最新版本的postgresql,ruby和datamapper.

我创建一个这样的查询:

collection = Entry.all(:id => 2..4, :text => /test/)
Run Code Online (Sandbox Code Playgroud)

collection是一个DataMapper::Collection对象.DataMapper::Query只需调用就可以获得对象query = collection.query.但是如何以字符串形式获取查询的原始SQL?

我需要它,因为我必须自定义原始SQL(我需要SELECT DISTINCT而不是仅SELECT),但我不想完全自己编写SQL,因为我不确定我是否可以编写安全查询.

我也很乐意以另一种方式归档我的目标,我愿意接受全新的建议;)

ruby postgresql ruby-datamapper

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

在href属性中转义html是否有效?

假设我有以下链接:

<a href='http://google.com/bla'>http://google.com/bla</a>
Run Code Online (Sandbox Code Playgroud)

这个也有效吗?

<a href='http:&#x2F;&#x2F;google.com/bla'>http://google.com/bla</a>
Run Code Online (Sandbox Code Playgroud)

它适用于Firefox,但我不确定这是否是标准化行为.我希望这个问题不是超级哑巴!

html escaping html-escape-characters

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

如何正确使用IndexMut特性?

我最近玩过Rust并尝试为Point结构实现索引,这样就some_point[2]可以得到z坐标.

但是我无法获得下面的代码来编译.我错过了什么?

struct Point {
  x: int,
  y: int,
  z: int
}

impl IndexMut<uint, int> for Point {
  fn index_mut<'a>(&'a mut self, index: &uint) -> &'a mut int {
    & mut match *index {
      0 => self.x,
      1 => self.y,
      2 => self.z,
      _ => 0 //TODO: add proper error handling
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

[me@localhost rust]$ rustc blabla.rs && ./blabla
blabla.rs:25:11: 30:6 error: borrowed value does not live long enough
blabla.rs:25     & mut match *index {
blabla.rs:26 …
Run Code Online (Sandbox Code Playgroud)

traits rust

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