我想对某些结构提供一些业务规则保证。例如,anEmailAddress是有效的电子邮件,或者 aDateRange的 from 位于 from 之前,等等。因此,当传递这样的值时,可以保证遵守该结构的所有业务规则。
struct InvalidEmailAddress;
struct EmailAddress {
value: String
}
impl EmailAddress {
fn new(value: String) -> Result<Self, InvalidEmailAddress> {
if value.contains("@") { // I know, this isn't any sort of validation. It's an example.
Ok(Self { value })
} else {
Err(InvalidEmailAddress)
}
}
}
Run Code Online (Sandbox Code Playgroud)
忽略 now 的new()行为是意外的(使用方法可能会更好build()),这会带来一个问题:当有人EmailAddress通过构造函数构建 an 时,它保证是“有效的”。但是当有人将其构造为普通结构时,它可能不是。:
let guaranteed_valid = EmailAddress::new(String::from("hi@example.com")).unwrap();
let will_crash = EmailAddress::new(String::from("localhost")).unwrap()
let unknown_valid = EmailAddress { …Run Code Online (Sandbox Code Playgroud) 我在Rails中有一个非常平均的形式,通过blog_kit
<% form_for(@blog_post, :html => { :multipart => true }) do |f| %>\
... other code
<%= f.text_area :body %>
<%= debug(@blog_post) %>
Run Code Online (Sandbox Code Playgroud)
在编辑博客文章时,正文突然包含额外的空格(标记为_以显示):
...sit amet eleifend diam imperdiet pharetra.
__
__## FOO?
__Morbi nec
Run Code Online (Sandbox Code Playgroud)
因为textarea是空间感知的,它将显示空格.在更新时,它们将添加到数据库中.
这些空间不在数据库中(在上面提到的错误更新之前).BlogPost.find(1)模型也不包含这些空格.
script/console » b = BlogPost.find(1)
» puts b.body
...sit amet eleifend diam imperdiet pharetra.
## FOO?
Morbi nec
Run Code Online (Sandbox Code Playgroud)
在获取数据库之后,但在以局部形式呈现之前,似乎某些逻辑会添加空格.候选人是:
我不知道从哪里开始寻找,所以任何提示都会非常受欢迎.
rails 3 rspec-rails 2
在控制器中:
def index @users = User.paginate
:page => params[:page],:per_pae => 5
end
Run Code Online (Sandbox Code Playgroud)
在视图中:
<h1>User list</h1>
<% @users.each do |user| %>
<p>
<%= user.name %>
</p>
<% end %>
<%= will_paginate @users %>
Run Code Online (Sandbox Code Playgroud)
现在我使用rspec-rails 2来测试视图.
require 'spec_helper'
describe "/users/index.html.erb" do
before(:each) do
assign(:users, [
stub_model(User),
stub_model(User),
stub_model(User,
stub_model(User)
])
end
it "renders a list of contracts" do
render
rendered.should contain "User list"
end
end
Run Code Online (Sandbox Code Playgroud)
现在我使用rspec通用来测试它.我得到:未定义的方法`total_pages'for#
如何存根分页或其他一些方法来修复它?
我在以下位置定义了一个助手ApplicationHelper:
module ApplicationHelper
def url_for_portal
URI("https://example.com/")
end
end
Run Code Online (Sandbox Code Playgroud)
并想在邮件模板中使用它,app/views/client_mailer/account_activation.md.erb但得到一个undefined method 'url_for_portal':
Activate your Example.com account by clicking on the link below:
[<%= url_for_portal %>](<%= url_for_portal %>)
Run Code Online (Sandbox Code Playgroud)
如何在邮件模板中编写和使用辅助方法?
将Ruby的hashrocket符号更改为vim中的name: 'value' 符号的最有效方法是什么?
一些例子:
{
:id => site.id,
:primary_domain => site.name,
:wp_admin_url => site.wp_admin_url
}
{
id: site.id,
primary_domain: site.name,
wp_admin_url: site.wp_admin_url
}
{ :id => site.id, :primary_domain => site.name }
{ id: site.id, primary_domain: site.name }
Site.find_by(:access_token => params[:access_token], :primary_domain => params[:primary_domain])
Site.find_by(access_token: params[:access_token], primary_domain:params[:primary_domain])
Run Code Online (Sandbox Code Playgroud)
你有一个宏吗?我的一些更有效的序列呢?使用搜索替换?我能提出的最有效率,非常手动,需要一些重复:
ft:xpldf>
转到第一个:,删除它并将其粘贴到单词后面,然后向前移动一个字符并删除该=>部分.需要对:name => value哈希中的每个部分重复这一过程.并且不能简单地运行N次,因为很可能:symbols需要保留一些,就像在上一个例子中一样.
你如何从Hashrocket表示法中快速改变?
在Ruby中确保字符串长度的正确方法是什么?该字符串是多字节(UTF8).输入的字符串可能太短,完全正确或太长.它需要分别填充,不需要和切片.
我可以通过两个步骤到达那里:
def ensure_length(str, length)
str.ljust(length).slice(0, length)
end
Run Code Online (Sandbox Code Playgroud)
这有一种方法吗?如果需要分两步,最好的顺序是:然后切片,反之亦然,为什么?
我是 Rust 初学者,想知道如何struct动态访问 a的字段:
use std::collections::HashMap;
struct User {
email: String,
name: String,
}
impl User {
fn new(attributes: &HashMap<String,String>) -> User {
let mut model = User {
email: "",
name: "",
};
for (attr_name,attr_value) in attributes {
// assign value "attr_value" to attribute "attr_name"
// no glue how to do this
// in php would be: $model->{$attr_name} = $attr_value;
model.*attr_name *= attr_value;
}
model;
}
}
fn main() {
let mut map: HashMap::new();
map.insert("email",String::from("foo@bar.de"));
map.insert("name",String::from("John doe")); …Run Code Online (Sandbox Code Playgroud) 在 vim 中,我想搜索和替换文本。但我想用命令的输出替换它。
鉴于文本:
{ "_template": "foo" }
{ "_template": "foo" }
Run Code Online (Sandbox Code Playgroud)
我想搜索并替换它成为:
{ "_id": "239c55fd-538e-485f-8588-83d9735b6819" }
{ "_id": "2ae9f49f-244c-47b0-8f0f-c6c46e860af3" }
Run Code Online (Sandbox Code Playgroud)
后者是 unix/linux 命令的结果uuidgen。
它看起来像s:/"_template": "foo"/"_id": "<uuidgen>"/,但我不确定在<uuidgen>. 命令 uuidgen 只是一个示例,但它将是一个不带参数且不需要传入任何标准输入的命令(例如wc左右)。
它需要为每次搜索/替换再次调用命令。
这对vim有可能吗?或者我应该更好地使用 sed 和/或 awk 吗?
给出以下HTML:
<html>
<head>
<link href="http://example.com/g/8c" rel="shortlink" />
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)
如何在link, rel=shortlinkjavascript中检索href =""的内容?我不知道头部中的这些项目是否可以在DOM中访问.
该头 -tag可能包含更多的链接标签,资产如CSS.所述头 -tag可以含有多于一个的链路shortlink(按照HTML5"规格"),在这种情况下,只选择第一个.
我想知道是否Array只包含唯一(不同)条目.
[1,2,3,2].what_goes_here? #=> false
[1,2,3,4].what_goes_here? #=> true
Run Code Online (Sandbox Code Playgroud)
我不想操纵原始数组,所以
uniq的!{| item | ...}→ary或nil ...如果未进行任何更改,则返回nil(即,未找到重复项).
似乎不是正确的解决方案.否则我可能会做[1,2,3,4].uniq!.nil?.
我更喜欢优雅,可读,而不是一个复杂但性能更好的解决方案.
我有一个Option包含一些 JSON 的。如果是Some,则必须转换内部 JSON,但如果是None,则必须保留None。
这就是我目前实施的方式:
struct One;
struct Other;
impl One {
pub fn convert(&self) -> Other {
Other {}
}
}
fn example(attr: Option<One>) -> Option<Other> {
match attr {
Some(attr) => Some(attr.convert()),
None => None,
}
}
Run Code Online (Sandbox Code Playgroud)
我是新来的锈和不完全获得时使用的复杂性match,if let或时使用的?运营商。
我的实现是 Rust 惯用的吗?对我来说似乎比较冗长,而且看起来像一个到处都会出现的模式,所以我可以想象这可以更简洁地处理;是这样吗?
ruby ×3
rust ×3
vim ×2
actionmailer ×1
arrays ×1
bluecloth ×1
dom ×1
erb ×1
form-helpers ×1
javascript ×1
optional ×1
rspec ×1
rust-2018 ×1
testing ×1