小编kab*_*nus的帖子

防止函数使用const std :: string&接受0

值一千字:

#include<string>
#include<iostream>

class SayWhat {
    public:
    SayWhat& operator[](const std::string& s) {
        std::cout<<"here\n"; // To make sure we fail on function entry
        std::cout<<s<<"\n";
        return *this;
    }
};

int main() {
    SayWhat ohNo;
    // ohNo[1]; // Does not compile. Logic prevails.
    ohNo[0]; // you didn't! this compiles.
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将数字0传递给接受字符串的方括号运算符时,编译器不会抱怨。相反,它会在输入以下方法之前编译并失败:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid
Run Code Online (Sandbox Code Playgroud)

以供参考:

> g++ -std=c++17 -O3 -Wall -Werror -pedantic test.cpp -o test && ./test
> g++ --version
gcc …
Run Code Online (Sandbox Code Playgroud)

c++ string std implicit-conversion

80
推荐指数
2
解决办法
3816
查看次数

立管|什么是立管 c++20 和范围上下文中的平均值

有些用法|看起来更像函数管道或链接,而不是按位或,与 c++20 范围结合使用。像:

#include <ranges>
#include <vector>

template<typename T>
std::vector<T> square_vector(const std::vector<T> &some_vector) {
    auto result = some_vector | std::views::transform([](T x){ return x*x; };
    return {result.begin(), result.end()};
}
Run Code Online (Sandbox Code Playgroud)

显然,该|运算符不是按照通常意义上的按位或来使用的。它从什么时候开始工作,在什么类型的函数/对象上工作?这些像常规视图吗?有哪些注意事项?

c++ c++20 std-ranges

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

为什么 Julia 在组合匿名函数时不考虑链式函数中的最大函数?

我几天前才了解Julia 中的链接函数(如管道) 。今天我尝试了一些事情并得到了意想不到的结果。因此,我决定更好地询问问题的根源,以更好地理解 Julia 在链接函数中的行为。考虑这个例子:

\n
julia> a = [1 2 3]\n1\xc3\x973 Matrix{Int64}:\n 1  2  3\n
Run Code Online (Sandbox Code Playgroud)\n

然后我想链接一些像下面这样的函数,毕竟我想要整个矩阵的最大值:

\n
julia> a .|> x->x^2 .|> sqrt .|> Int64 |> maximum\n1\xc3\x973 Matrix{Int64}:\n 1  2  3\n
Run Code Online (Sandbox Code Playgroud)\n

但我期望只有一个3!为什么 Julia 不考虑链的最后一个函数,即函数maximum

\n

PS:另外,我也尝试过这样的方法:

\n
julia> a .|> x->x^2 .|> sqrt .|> Int64 |> x->maximum(x)\n1\xc3\x973 Matrix{Int64}:\n 1  2  3\n
Run Code Online (Sandbox Code Playgroud)\n

仍然不是我所期望的那样。

\n

julia

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

绘图中的注释自动放置

我有代码可以轻松地自动处理着色和绘制多个图(对我来说)。我想让注释变得更容易:

目标:如果注释 xy 与前一个注释冲突,请向上移动 - 直到与其他注释不发生冲突。

  1. 如果有一个功能已经能够做到这一点那将是一个梦想,但我找不到。

  2. 否则 - 列出注释并在坐标系中获取其边界框的最佳方法是什么?

我有一个自动着色代码,如下所示:

if chain:
    children = []
    for child in Iplot.axes.get_children():
        if (type(child) is not matplotlib.collections.PathCollection and
            type(child) is not matplotlib.lines.Line2D):
            continue
        children.append(child)
    col_step = 1.0/(len(children)+len(args))
    for child in children:
        child.set_color([Iplot.col,0,1-Iplot.col])
        Iplot.col += col_step
Run Code Online (Sandbox Code Playgroud)

我可以对注释做类似的事情(更改 if 语句和第二个循环的主体),但是 1)我不喜欢这段代码 2)我希望存在更优雅的东西。

python text matplotlib plot-annotations

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

RabbitMQ 在 Debian Stretch 上安装/启动失败

sudo apt-get install rabbitmq-server
Run Code Online (Sandbox Code Playgroud)

当服务尝试启动时(也在使用systemctl start)时遇到错误:

? rabbitmq-server.service - RabbitMQ Messaging Server
  Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
  Active: failed (Result: exit-code) since Wed 2017-07-26 15:59:41 IDT; 4min 28s ago
  Process: 17895 ExecStartPost=/usr/lib/rabbitmq/bin/rabbitmq-server-wait (code=exited, status=70)
  Process: 17894 ExecStart=/usr/sbin/rabbitmq-server (code=exited, status=1/FAILURE)
 Main PID: 17894 (code=exited, status=1/FAILURE)
Run Code Online (Sandbox Code Playgroud)

那在systemctl status. 在journalctl -xe

-- Unit rabbitmq-server.service has begun starting up.
Jul 26 15:59:37 myhost rabbitmq[17895]: Waiting for rabbit@myhost ...
Jul 26 15:59:37 myhost rabbitmq[17895]: pid is …
Run Code Online (Sandbox Code Playgroud)

debian rabbitmq

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

除了一个例外,总是执行finally块

我有一个try:finally必须始终执行(无论是否异常)的块,除非发生特定的异常。为了论证,我们假设它是一个ValueError,所以我问我是否可以实现:

try:
    stuff()
except Exception as e:
    if type(e) is ValueError: raise
    #do important stuff
    raise

#do important stuff
Run Code Online (Sandbox Code Playgroud)

以一种更优雅的方式跳过复制粘贴#importantstuff。如果我统治Python,它将看起来像:

try:
    stuff()
finally except ValueError:
    #do important stuff
Run Code Online (Sandbox Code Playgroud)

#importantstuff一个函数是不是一个答案,但不可能IS。

python exception-handling

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

删除tcl中的文件时文件名太长错误

我正在尝试删除文件.来自tcl脚本的vcd扩展.但我得文件名太长错误.我试过了puts [file delete [glob *.vcd]].这样做的正确方法是什么?

linux tcl delete-file

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

获取错误 - "不能结合使用(ArgumentError)"Ruby

我正在研究Ruby课程,在运行其中一个示例时遇到了错误.这是我的Ruby类:

require 'json'

class User

  attr_accessor :email, :name, :permissions

  def initialize(*args)
    @email = args[0]
    @name = args[1]
    @permissions = User.permisisons_from_template
  end

  def self.permisisons_from_template
    file = File.read 'user_permissions_template.json'
    JSON.load(file, nil, symbolize_names: true)
  end

  def save
    self_json = {email: @email, name: @name, permissions: @permissions}.to_json
    open('users.json', 'a') do |file|
      file.puts self_json
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

我的跑步者文件代码如下所示:

require 'pp'
require_relative 'user'

user = User.new 'john.doe@example.com', 'John Doe'

pp user

user.save
Run Code Online (Sandbox Code Playgroud)

运行此命令"ruby runner.rb"时出现此错误:

/usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/json/common.rb:156:in `initialize': options :symbolize_names and :create_additions cannot be  used in conjunction (ArgumentError)
        from …
Run Code Online (Sandbox Code Playgroud)

ruby

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

将点击事件添加到 pyplot 中的注释

我正在寻找一种方法将“点击”事件添加到注释中matplotlib.pyplot以销毁它。相关代码:

import matplotlib.pyplot as plt
plt.ion()
plt.plot()
plt.annotate("Kill me",xy=(0,0))
Run Code Online (Sandbox Code Playgroud)

现在我们需要找到注解,一种方法是迭代:

plt.gca().texts
Run Code Online (Sandbox Code Playgroud)

虽然可能有更好的方法。到目前为止,我还没有找到如何使用此获取小部件/添加事件。这是可能使用mpl_connect的的plt数字画布,但我不知道,这将需要边框,我想尽量避免前往,但如果没有其他的解决方案是可用的罚款。

annotations matplotlib

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

Git clean 过滤器 - 检索原始行,git smudge 但不是原始行

为了结帐/差异/阶段等目的,我想完全忽略一些行:

set(ROOT /path/to/something/name_suffix)
set(ROOT /path/to/something/othername_suffix)
Run Code Online (Sandbox Code Playgroud)

偶尔(但并非总是)我会把它作为

set(ROOT /some/other/private/path/name)
set(ROOT /some/other/private/path/othername)
Run Code Online (Sandbox Code Playgroud)

忽略的意思是:

  1. ~smudge:如果我签出它,什么也没做。如果它与索引匹配,它将保持不变。如果改变了,它将保持不变。
  2. clean:它不会被考虑用于 diff 或 git add 的目的。

我拥有的:

  1. Git 过滤器会弄脏我的私人路径 - 问题是如果我有原始行,在签出时它将恢复到我更改的行(带有个人路径):

    smudge = "sed 's#set\\(ROOT\\) .*/\\([a-z]*\\).*)#\\1 /some/other/private/path/\\2)#'"
    
    Run Code Online (Sandbox Code Playgroud)

我还没有实现 git clean ,因为我目前看到的唯一方法是硬编码原始后缀的脚本或分析git diff以查看最初提交的内容的脚本(问题是_suffix,我不知道工作树中的内容。原始路径可以硬编码,不会改变),并将其替换为索引的内容。我不希望我的私人路径包含_suffix目录。

这里有两件事:

  1. 如果 git smudge 确实与原来的行完全一样,则不将原始行更改为个人行是否可能?
  2. 清洁过滤器还有其他解决方案吗?

git

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

检查标签是否在网格管理器中

我正在寻找一种方法来检测 Python Tkinter 网格中当前可见的标签。我在谈论

L=Label(someFrame)
L1=Label(someFrame)
L.grid(row=1,column=1)
L1.grid(row=2,column=1)
L1.grid_remove()
Run Code Online (Sandbox Code Playgroud)

无论如何,是否可以将 L1 与 L 区分开来?我正在 Tkinter 中寻找一些东西,而不是自己管理列表。可能访问网格管理器并查看是否有标签?

python tkinter

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

Python字典强制执行单一分配

我正在寻找优雅的解决方案:

x = {}
x['key'] = 'something'
...
...
for i in someKeyList:
    if i in x: raise KeyError('Enforcing single assign') #Happens for i == 'key' for example
    x[i] = 'else'
Run Code Online (Sandbox Code Playgroud)

基本上我想要一个字典,其中分配给现有密钥会引发错误.我目前实现了一个UserDict,但这些比内置的慢.但我正在寻找内置或至少在常见模块中的东西.

XY:这是对存在的哈希检查,我需要O(1)查找和插入.

注意

我想要的字典不是一成不变的(是可变的......).您可以添加,删除或执行任何操作.唯一的区别是为现有值赋值会引发错误.

python dictionary

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