我目前正在努力了解binary-size(number)Elixir的工作原理.在The Little Elixir&OTP Guidebook的例子中,有一节中它们分解了一个128字节的ID3标签.该标记具有以下属性:
他们在书中提取这个的方式是
<< "TAG", title :: binary-size(30), artist :: binary-size(30), album :: binary-size(30), year:: binary-size(4), _ :: binary >>
Run Code Online (Sandbox Code Playgroud)
我无法理解每个值如何从中获取正确的值binary-size(#num).也许这是模式匹配发生的顺序,我很难理解.目前我正在接近它,因为我们首先模式匹配三个字节的标头,因为它是硬编码的"TAG",此时我不确定我们如何从中获取30个字节的值binary-size(30).此操作是否分为两个独立的部分?我们是说第一个从128,总字节大小,我们减去30然后将大小(30)的值赋给标题,然后将这个更新的大小带到二进制模式匹配中的每个值,传播任何变化吗?
我尝试了一些代码,并想知道constC++中的限定符在使用时如何应用于指针类型auto.
int main()
{
int foo = 1;
int bar = 2;
//Expected: const int * ptr_to_const_int = &foo;
const auto ptr_to_const_int = &foo;
//Expected: int * const const_ptr_to_int = &foo;
auto const const_ptr_to_int = &foo;
*ptr_to_const_int = 3; //Thought this would error
//ptr_to_const_int = &bar; This does error.
*const_ptr_to_int = 3;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我意识到有一个类似的问题,询问它们是否相同,我更具体地询问这里的规则是什么,它适用于推断结束指针类型.
在这个网站上,它声明传递给二进制谓词的一个约束std::search是:
Type1和Type2类型必须使得ForwardIt1和ForwardIt2类型的对象可以被解除引用,然后隐式转换为Type1和Type2.
但是,在C++国际标准文档中,我看不到对这种约束的引用.我想知道这个约束是否在C++国际标准文档中明确说明了它所属的部分.另外,如果不是那么为什么这个约束放在std::search函数上,因为不可能有两个不同的类型,虽然不可隐式转换,但是定义了相等的运算符重载?
我想确认我正确使用std::launder(...)确保我正确理解它的用法。
我正在Result<U,E>基于 Rust 的实现在 C++ 中创建一个。
template <typename E>
class ResultStorage<void, E, std::enable_if_t<std::is_trivially_destructible_v<E>>> {
using type = typename std::aligned_storage<sizeof(E), alignof(E)>::type;
public:
explicit constexpr ResultStorage(const Ok<void>&) noexcept : tag_(ResultTag::OK) {}
explicit constexpr ResultStorage(const Ok<void>&&) noexcept : tag_(ResultTag::OK) {}
explicit constexpr ResultStorage(const Err<E>& err) noexcept(std::is_nothrow_copy_constructible<E>())
: tag_(ResultTag::ERR) {
new (&error_) E(err.get_error());
}
explicit constexpr ResultStorage(const Err<E>&& err) noexcept(std::is_nothrow_move_constructible<E>())
: tag_(ResultTag::ERR) {
new (&error_) E(std::move(err.get_error()));
}
~ResultStorage() = default;
[[nodiscard]] constexpr E& get_error() & noexcept {
assert_err(tag_);
return *std::launder(reinterpret_cast<E*>(&error_)); …Run Code Online (Sandbox Code Playgroud) 嗨我正在尝试编写一个程序,如果有兴趣的人在给定时间上线,该程序将提醒用户.到目前为止,我的计划是
#!/usr/bin/ksh
message=""
when=""
validFiles=""
validUsers=""
if [ $# -gt 0 ] ; then
while getopts w:m: opt
do
case $opt in
w) when=$OPTARG;;
m) message=$OPTARG;;
\?) echo $USAGE exit 2;;
esac
done
shift $(($OPTIND - 1))
if [[ $# -gt 0 ]] ; then
for i; do
if [[ -f "$i" && -r "$i" ]]; then
if ! echo $validFiles | grep $i >/dev/null; then
validFiles="$validFiles $i"
fi
elif id $i 2> /dev/null 1>&2; then
if ! echo $validUsers …Run Code Online (Sandbox Code Playgroud) 我在以下上下文中无法理解'&'运算符.
@doc "Marks a task as executed"
def put_task(task, project) do
item = {task, project}
Agent.update(__MODULE__, &MapSet.put(&1, item))
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,似乎'&1'指的是地图对象本身,但我很好奇这是如何工作的.它是作为一个参数传递给我自己在文档中查看这个,但无法确定这是否正是发生了什么.如果有人能帮助我理解究竟发生了什么以及&1指的是什么,如果它引用了MapSet,我将不胜感激.
我正在运行VS 2015 Community Edition中的所有代码.
当我尝试实现在Code Review中向我建议的建议时,我的代码中出现错误.那我有麻烦的部分被改变的参数TryPush是TryPush(T&& val).
#pragma once
#include <atomic>
#include <memory>
template <typename T> class RingBuffer {
public:
/*
Other functions
*/
void Push(T val) {
while (!TryPush(val));
}
private:
/*
Other functions
*/
//Private Member Functions
bool TryPush(T && val) {
const std::size_t current_write = write_position.load(std::memory_order_acquire);
const std::size_t current_read = read_position.load(std::memory_order_acquire);
const std::size_t next_write = increment_index(current_write);
if (next_write == current_read) { return false; }
_ring_buffer_array[current_write] = std::move(val);
write_position.store(next_write, std::memory_order_release);
return true; …Run Code Online (Sandbox Code Playgroud) 我有一个配置文件,我想用以下格式阅读
[key_1]
inner_key_1 inner_entry_1
inner_key_2 inner_entry_2
inner_key_3 inner_entry_3
inner_key_4 inner_entry_4
[key_2]
inner_key_5 inner_entry_5
inner_key_6 inner_entry_6
inner_key_7 inner_entry_7
inner_key_8 inner_entry_8
Run Code Online (Sandbox Code Playgroud)
然后将其映射到嵌套的Elixir字典中.
%{key_1 => %{inner_key_1 => inner_entry_1, ... }, key_2 => %{inner_key_5 => inner_entry_5,...}}
Run Code Online (Sandbox Code Playgroud)
我无法用Elixir和函数式编程来概念化如何做到这一点.我已经尝试使用Stream库来实现这一目标,但没有运气.
我目前有以下功能:
fn filter_files<P>(input_path: P) -> Result<Vec<DirEntry>, Box<dyn error::Error>> where P: AsRef<Path> {
fs::read_dir(input_path)?
.into_iter()
.filter_map(|res| res.ok())
.filter(|dir_entry| dir_entry.file_name().to_str().unwrap().starts_with("_x"))
.collect()
}
Run Code Online (Sandbox Code Playgroud)
我试图过滤掉以_x. 我想让这个函数Vec<DirEntry>直接返回过滤后的结果,而不必创建变量。我的问题是我无法获得正确的函数签名。我收到错误
error[E0277]: a value of type `Result<Vec<DirEntry>, Box<dyn std::error::Error>>` cannot be built from an iterator over elements of type `DirEntry`
--> src/main.rs:18:10
|
18 | .collect()
| ^^^^^^^ value of type `Result<Vec<DirEntry>, Box<dyn std::error::Error>>` cannot be built from `std::iter::Iterator<Item=DirEntry>`
Run Code Online (Sandbox Code Playgroud)
我想知道这个函数的返回类型的正确签名应该是什么,以便它fs::read_dir(...)可以返回一个io::Error我知道我需要返回一个Result类型。这是正确的用法collect()还是不正确的用法。
我试图在页面上做一个简单的登录.每当我尝试将我的页面路由到用户注册时,我收到以下错误.
UndefinedFunctionError at GET /users/new
function Ecto.Changeset.fetch/2 is undefined or private. Did you mean one of:
* fetch_change/2
* fetch_field/2
Run Code Online (Sandbox Code Playgroud)
这个错误似乎来自Changeset,因为每当我注释掉我的Changeset并只渲染一个空的html页面时它就可以工作.任何帮助将非常感激.
网/控制器/ user_controller.ex
defmodule Test.UserController do
use Test.Web, :controller
alias Test.User
def new(conn, params) do
changeset = User.changeset(%User{})
render conn, "new.html", changeset
end
def show(conn, %{"user_id_hash" => user_id_hash}) do
render conn, "user_index.html", %{layout: {Test.LayoutView, "react.html"}}
end
def create(conn, %{"user" => user_params}) do
changeset = User.changeset(%User{}, user_params)
case Repo.insert(changeset) do
{:ok, user} ->
conn
|> put_flash(:info, "#{user.username} thank you for signing …Run Code Online (Sandbox Code Playgroud)