我只花了一个星期阅读Rust Book,现在我正在开发我的第一个程序,它将文件路径返回到系统壁纸:
pub fn get_wallpaper() -> &str {
let output = Command::new("gsettings");
// irrelevant code
if let Ok(message) = String::from_utf8(output.stdout) {
return message;
} else {
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误expected lifetime parameter on &str
,我知道Rust想要一个输入&str
,它将作为输出返回,因为&str
我在函数内部创建的任何内容都将在函数结束后立即清理.
我知道我可以通过返回一个String
而不是一个来回避这个问题&str
,并且对类似问题的许多答案已经说了很多.但我似乎也可以这样做:
fn main() {
println!("message: {}", hello_string(""));
}
fn hello_string(x: &str) -> &str {
return "hello world";
}
Run Code Online (Sandbox Code Playgroud)
得到&str
我的功能.有人可以向我解释为什么这很糟糕,为什么我不应该这样做?或者也许它在某些情况下并不坏并且没问题?
我刚刚第一次从GitHub克隆了一个存储库.
我去了我的本地机器,所以在我的Mac上的本地存储库中运行以下命令
bin/rails服务器
我收到以下错误:
无法在任何源中找到activesupport-5.0.0.1运行bundle install
以安装缺少的gem.
所以我按照建议运行了bundle install命令,但后来它给了我以下错误
安装oj(2.12.14)时发生错误,Bundler无法继续.gem install oj -v '2.12.14'
在捆绑之前确保成功.
所以我按照建议运行:gem install oj -v'2.12.14'
然后我得到了一个非常长的消息,警告和错误(见下文).有什么想法吗?
ERROR: Error installing oj:
ERROR: Failed to build gem native extension.
current directory: /usr/local/lib/ruby/gems/2.4.0/gems/oj-2.12.14/ext/oj
/usr/local/opt/ruby/bin/ruby -r ./siteconf20170218-3717-1p2bvl9.rb extconf.rb
>>>>> Creating Makefile for ruby version 2.4.0 on x86_64-darwin16 <<<<<
creating Makefile
current directory: /usr/local/lib/ruby/gems/2.4.0/gems/oj-2.12.14/ext/oj
make "DESTDIR=" clean
current directory: /usr/local/lib/ruby/gems/2.4.0/gems/oj-2.12.14/ext/oj
make "DESTDIR="
compiling cache8.c
compiling circarray.c
compiling compat.c
compiling dump.c
dump.c:503:8: warning: implicit conversion loses integer precision: 'long' to …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个按键事件,该事件对某些控制字符执行特殊功能,但将任何可打印字符插入字符串中。
this.handle_keypress = function(event) {
let callback = this.control_function[event.key];
if(callback) {
callback.bind(this)(event);
}
else {
this.myText += event.key;
}
}
this.element.addEventListener('keypress', this.handle_keypress.bind(this));
Run Code Online (Sandbox Code Playgroud)
但这会将未映射的控制字符的文本插入到我的字符串中(例如“LeftArrow”或“Backspace”)。如何判断哪些字符是可打印字符,哪些是控制字符?
过去,我会使用 event.which 或 event.charCode,但这些现在已标记为已弃用。
据我所知,我无法使用输入事件,因为我没有在文本区域或输入字段中输入内容。
我在 Firefox 中运行这个。
我正在Rust写一个玩具编程语言.我在Ruby中构建了解析器逻辑原型:
def rd_tree(chars)
loop do
case c = chars.next
when /\s/
# whitespace stuff
when "("
# open paren stuff
when ")"
# close paren stuff
else
# default stuff
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在我将它转换为Rust:
fn rd_tree(chars: std::str::Chars) {
while let Some(c) = chars.next() {
if c.is_whitespace() {
// whitespace stuff
} else if c == '(' {
// open paren stuff
} else if c == ')' {
// close paren stuff
} else {
// default stuff
}
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个布局,其中屏幕被分成一些大小相同的单元格。当我用内容填充其中一个单元格时,它会拉伸得比其他单元格大,即使内容比单元格本身小得多。
尽管单元格足够大以容纳其内容,但为什么单元格会拉伸?我怎样才能防止它调整大小?
html, body {
margin: 0px;
padding: 0px;
width: 100%;
height: 100%;
background-color: #880022;
}
#content {
display: grid;
width: 100%;
height: 100%;
grid-template-rows: 20px auto 20px;
grid-template-columns: 20px auto 20px;
}
#content2 {
display: grid;
grid-template-rows: auto;
grid-template-columns: auto;
height: 100%;
background-color: #ff00ff;
}
#grid {
grid-row-start: 2;
grid-column-start: 2;
display: grid;
grid-template-rows: auto auto;
grid-template-columns: auto auto;
grid-gap: 2px 2px;
}
.tile {
background-color: rgba(255, 255, 255, 0.2);
display: flex;
align-items: center;
justify-content: center;
}
.tile span …
Run Code Online (Sandbox Code Playgroud)我有以下 Vue 组件:
Vue.component('result', {
props: ['stuff'],
data: () => ({}),
template: "<img :src='tag' class='result'></img>",
computed: {
tag: function tag() {
return `pages/search/img/${this.stuff.type.toLowerCase()}_tag.png`;
}
}
});
Run Code Online (Sandbox Code Playgroud)
创建组件时,会抛出错误:
TypeError: Cannot read property 'toLowerCase' of undefined
at VueComponent.tag
Run Code Online (Sandbox Code Playgroud)
但是,当我删除对 的调用时toLowerCase()
,该方法会正确执行,生成具有预期类型的字符串。我可以通过将文件名更改为大写字母来解决这个问题,但我更愿意理解为什么 Vue 会这样。为什么只有在调用属性的方法时属性才会未定义?
更新:经过一些故障排除后,我发现this.stuff.type
第一次tag()
计算时未定义。调用toLowerCase()
只会强制一个原本无声的错误发生错误。第一次调用函数props
时未定义是否有原因?computed
我应该以不同的方式编写我的组件吗?
我正在尝试使用安全导航运算符&
来选择调用[]
变量上的方法,该变量可能是散列或nil
. 据我所知,这就是安全导航操作员的用途。
my_hash = nil
puts "hello, #{ my_hash&[:test] }"
my_hash = { test: "world" }
puts "hello, #{ my_hash&[:test] }"
Run Code Online (Sandbox Code Playgroud)
我期望输出:
hello, false
hello, world
Run Code Online (Sandbox Code Playgroud)
但它不适用于哈希;相反,我得到:
hello, false
undefined method `&` for `{:test=>"world"}:Hash` (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我正在使用以下网格布局:
grid-template-columns: 10em 1fr 10em;
grid-template-rows: 2em 1fr 2em;
Run Code Online (Sandbox Code Playgroud)
创建一个充满屏幕大部分区域的居中区域,同时在屏幕周围保留一些填充。在此1fr x 1fr
网格区域内是一个pane
div,其中包含一个editor
div,该div中包含一个content
div。
该content
DIV可以是任意高度,editor
DIV已overflow: scroll
设置。我的问题是,不是pane
保持相同的大小并editor
处理溢出,而是pane
增长并导致整个页面滚动。
我可以pane
通过设置它来避免增长overflow: scroll
,但这会导致编辑器本身滚动而不是滚动。这是不可接受的,因为编辑器的按钮必须始终显示在屏幕上。
在网格布局中,是否有办法允许此功能?我最初使用的是flex布局,其中pane
div是100% x 100%
flexbox中的单个项目。我改用网格以方便地调整侧面菜单的大小,因此在不使用网格的情况下实施此方法不是可取的。
另外,多浏览器支持将是惊人的,但是我的目标浏览器是Chrome。
grid-template-columns: 10em 1fr 10em;
grid-template-rows: 2em 1fr 2em;
Run Code Online (Sandbox Code Playgroud)
body, html {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
}
#site {
width: 100%;
height: 100%;
background-color: #000;
display: grid;
grid-template-rows: …
Run Code Online (Sandbox Code Playgroud)我正在创建一个返回Weak
对特征对象的引用的函数。在找不到对象的情况下(它是一个查找函数),我想Weak
使用以下方法返回一个空引用Weak::new()
:
use std::rc::{self, Rc, Weak};
use std::cell::RefCell;
pub trait Part {}
pub struct Blah {}
impl Part for Blah {}
fn main() {
let blah = Blah {};
lookup(Rc::new(RefCell::new(blah)));
}
fn lookup(part: Rc<RefCell<Part>>) -> Weak<RefCell<Part>> {
if true {
Rc::downgrade(&part)
} else {
Weak::new()
}
}
Run Code Online (Sandbox Code Playgroud)
这样在编译的时候会出现如下错误:
use std::rc::{self, Rc, Weak};
use std::cell::RefCell;
pub trait Part {}
pub struct Blah {}
impl Part for Blah {}
fn main() {
let blah = Blah {}; …
Run Code Online (Sandbox Code Playgroud) 我写了一个基于Rust文档的非常简单的脚本:
use std::fs::{self, DirEntry};
use std::path::Path;
fn main() {
let path = Path::new(".");
for entry in fs::read_dir(path)? {
let entry = entry?;
let path = entry.path();
if path.is_dir() {
println!("directory found!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到以下编译错误?
:
error[E0277]: the trait bound `(): std::ops::Carrier` is not satisfied
--> test.rs:6:18
|
6 | for entry in fs::read_dir(path)? {
| -------------------
| |
| the trait `std::ops::Carrier` is not implemented for `()`
| in this macro invocation
|
= note: required …
Run Code Online (Sandbox Code Playgroud) rust ×4
css ×2
css-grid ×2
html ×2
javascript ×2
ruby ×2
css3 ×1
flexbox ×1
grid-layout ×1
vue.js ×1