小编cog*_*gle的帖子

二元大小如何在Elixir中工作

我目前正在努力了解binary-size(number)Elixir的工作原理.在The Little Elixir&OTP Guidebook的例子中,有一节中它们分解了一个128字节的ID3标签.该标记具有以下属性:

  • 3字节标题
  • 30字节标题标签
  • 30字节艺术家标签
  • 30字节的专辑标签
  • 4字节年份标记
  • 休息包装

他们在书中提取这个的方式是

<< "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)的值赋给标题,然后将这个更新的大小带到二进制模式匹配中的每个值,传播任何变化吗?

elixir

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

const auto和auto const如何应用于指针?

我尝试了一些代码,并想知道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)

我意识到有一个类似的问题,询问它们是否相同,我更具体地询问这里的规则是什么,它适用于推断结束指针类型.

c++ c++11

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

std :: search的C++二进制谓词实现要求

在这个网站上,它声明传递给二进制谓词的一个约束std::search是:

Type1和Type2类型必须使得ForwardIt1和ForwardIt2类型的对象可以被解除引用,然后隐式转换为Type1和Type2.

但是,在C++国际标准文档中,我看不到对这种约束的引用.我想知道这个约束是否在C++国际标准文档中明确说明了它所属的部分.另外,如果不是那么为什么这个约束放在std::search函数上,因为不可能有两个不同的类型,虽然不可隐式转换,但是定义了相等的运算符重载?

c++ c++11

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

正确使用 std::launder

我想确认我正确使用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)

c++ c++17

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

shell脚本:"'<<'无法比拟"-syntax错误使用here here

嗨我正在尝试编写一个程序,如果有兴趣的人在给定时间上线,该程序将提醒用户.到目前为止,我的计划是

#!/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)

shell ksh

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

'&'运算符如何工作?

我在以下上下文中无法理解'&'运算符.

  @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,我将不胜感激.

elixir

4
推荐指数
3
解决办法
1961
查看次数

通用引用:无法将参数从'int'转换为'int &&'

我正在运行VS 2015 Community Edition中的所有代码.

当我尝试实现在Code Review中向我建议的建议时,我的代码中出现错误.那我有麻烦的部分被改变的参数TryPushTryPush(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)

c++ c++11

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

将文件解析为嵌套字典

我有一个配置文件,我想用以下格式阅读

[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库来实现这一目标,但没有运气.

elixir

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

如何将迭代器收集到结果中?

我目前有以下功能:

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()还是不正确的用法。

rust

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

获取错误Ecto.Changeset.fetch/2是未定义的或私有的

我试图在页面上做一个简单的登录.每当我尝试将我的页面路由到用户注册时,我收到以下错误.

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)

elixir phoenix-framework

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

标签 统计

c++ ×4

elixir ×4

c++11 ×3

c++17 ×1

ksh ×1

phoenix-framework ×1

rust ×1

shell ×1