小编tjw*_*992的帖子

找到具有非线性进展的最近值

这有点复杂,但请耐心等待.我正在尝试创建一个地图,将音符的名称与相应的频率相关联.然后我想编写一个函数,当提供随机频率时,将返回最接近该频率的音符.

这个问题是音符的频率不是用线性公式生成的,因此每个音符之间的确切中间频率也不是线性的.(这基本上意味着音符之间的中点不完全在中间,因此通过常规方法找到中点不起作用.)

一些示例代码用于生成注释地图:

// Ordered starting with "B" so notes line up with frequencies
vector<string> names = {
    "B", "C", "C#/Db", "D", "D#/Eb", "E", "F", "F#/Gb", "G", "G#/Ab", "A", "A#/Bb"
};

double f0 = 440;
map<string, map<int, double> > notes;

// Map notes to their corresponding frequencies
for (int octave = 0; octave < 10; ++octave) {
    for (int index = 0; index < names.size(); ++index) {

        // Get the exact frequency of the musical note
        double frequency               = f0*pow(pow(2, …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm math dictionary

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

将 clang-tidy 与仅标头的 CMake 项目一起使用

我正在开发一个仅标头的库,并希望使用 clang-tidy 来确保我遵循“C++ 核心指南” https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines

无论我尝试什么,我似乎都无法让 clang-tidy 在仅标头的库上工作(可能是因为在使用库之前没有真正编译任何内容)...但是必须有一些解决方法才能使其正常工作。当然,其他人已经编写了一个仅包含头文件的库,他们想在其上使用 clang-tidy。

为了尝试简化问题,我做了一个小型测试项目来尝试让它工作。这个项目只有两个文件。CMakeLists.txt 文件和头文件。

CMakeLists.txt:

cmake_minimum_required(VERSION 3.11.4)

project(my_project LANGUAGES CXX)

# This does not seem to work at all for header only libraries
# I even tried messing with the "-header-filter" parameter and had no luck
set(CMAKE_CXX_CLANG_TIDY clang-tidy;-checks=-*,cppcoreguidelines-*)

add_library(my_project INTERFACE)

target_include_directories(my_project
  INTERFACE
    $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
)
Run Code Online (Sandbox Code Playgroud)

包括/my_project.hpp:

#include <iostream>

// I know it is bad to do this in a header file.
// This is intentional to give clang-tidy something to catch
using namespace …
Run Code Online (Sandbox Code Playgroud)

c++ cmake llvm clang-tidy

7
推荐指数
2
解决办法
4276
查看次数

写入Perl Moose类中的只读属性

使用Perl和Moose,可以通过两种方式访问​​对象数据.

$self->{attribute} 要么 $self->attribute()

这是一个简单的例子,展示了两者:

# Person.pm
package Person;

use strict;
use warnings;
use Moose;

has 'name' => (is => 'rw', isa => 'Str');
has 'age'  => (is => 'ro', isa => 'Int');

sub HAPPY_BIRTHDAY {
    my $self = shift;
    $self->{age}++;   # Age is accessed through method 1
}

sub HAPPY_BIRTHDAY2 {
    my $self = shift;
    my $age = $self->age();
    $self->age($age + 1);   # Age is accessed through method 2 (this will fail)
}

1;
Run Code Online (Sandbox Code Playgroud)
# test.pl
#!/usr/bin/perl …
Run Code Online (Sandbox Code Playgroud)

perl accessor moose

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

使用Perl正则表达式捕获C样式代码块之前和之后的文本

我试图使用Perl正则表达式捕获C风格代码块之前和之后的一些文本.到目前为止,这就是我所拥有的:

use strict;
use warnings;

my $text = << "END";
int max(int x, int y)
{
    if (x > y)
    {
        return x;
    }
    else
    {
        return y;
    }
}
// more stuff to capture
END

# Regex to match a code block
my $code_block = qr/(?&block)
(?(DEFINE)
    (?<block>
        \{                # Match opening brace
            (?:           # Start non-capturing group
                [^{}]++   #     Match non-brace characters without backtracking
                |         #     or
                (?&block) #     Recursively match the last captured group
            )*            # Match …
Run Code Online (Sandbox Code Playgroud)

regex perl regex-recursion

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

Regexp :: Debugger Perl模块似乎不能在另一个Perl模块中工作

我正在编写一个Perl模块,它涉及一些非常复杂的正则表达式,如果没有工具来帮助我几乎无法调试.我认为该Regexp::Debugger模块将是完成该工作的完美工具,但它似乎只能在.pl脚本中工作,并且似乎不能在.pm模块中工作.


例如,这有效:

test.pl

use strict;
use warnings;
use Regexp::Debugger;

my $text = "text";
if ($text =~ /tex/) {
    print "Match!";
}
Run Code Online (Sandbox Code Playgroud)

我得到了预期的调试功能.


但第二个我介绍了一个Perl模块,它不再起作用:

test.pl

use strict;
use warnings;
use TestModule;

TestModule::func();
Run Code Online (Sandbox Code Playgroud)

TestModule.pm

package TestModule;

use strict;
use warnings;
use Regexp::Debugger;

sub func {
    my $text = "text";
    if ($text =~ /tex/) {
        print "Match!";
    }
}

1;
Run Code Online (Sandbox Code Playgroud)

尝试运行此代码会出现以下错误:

不能在Regexp/Debugger.pm第160行使用未定义的值作为HASH参考

简单地包含Regexp::Debugger在"test.pl"文件中也不起作用,因为它不会尝试在包含的模块中调试正则表达式.

我怎样才能使这个工作,所以我可以调试我正在工作的模块中的正则表达式?


更新:

已提交错误报告,现在CPAN上的新版本(v0.002001)可按预期工作.:)

regex debugging perl perl-module

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

使用“auto”来推断嵌套初始值设定项列表的类型

我正在尝试使用auto自动推断嵌套的类型std::initializer_list

auto list = {
    {{ 0, 1}, { 2, 3 }},
    {{ 4, 5}, { 6, 7 }},
};
Run Code Online (Sandbox Code Playgroud)

这里的实际类型是std::initializer_list<std::initializer_list<std::initializer_list<int>>>,但是当我尝试编译它时,我收到一条错误,指出auto无法推断出该类型。有什么方法可以auto识别这样的构造吗?

我有一个程序,其中这些初始值设定项列表可以具有任意大小和深度,因此对类型进行硬编码是不切实际的。

附加信息:

我在这里找到了有关初始化程序列表的文档:https ://en.cppreference.com/w/cpp/language/list_initialization

花括号初始化列表不是表达式,因此没有类型,例如格式decltype({1,2})错误。没有类型意味着模板类型推导无法推导出与花括号初始化列表匹配的类型,因此给定声明的template<class T> void f(T);表达式格式f({1,2,3})不正确。但是,可以以其他方式推导模板参数,就像 的情况一样std::vector<int> v(std::istream_iterator<int>(std::cin), {}),其中迭代器类型由第一个参数推导,但也用于第二个参数位置。使用关键字 auto 进行类型推导有一个特殊的例外,它会像std::initializer_list复制列表初始化一样推导任何花括号初始化列表。

该文档似乎表明,对于类型推导使用有一个特殊的例外,auto因此您会认为这会起作用......但似乎当您使用嵌套列表时auto无法推导类型。

c++ initializer-list auto type-deduction

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

Perl脚本中的SQL*Plus

我正在尝试使用SQL*Plus连接到表并在Perl脚本中获取数据并将该输出存储在Perl变量中.

在shell脚本中我会这样做:

    SQL_RESULT=`sqlplus -s ${CONNECT_STRING} << EOF
    ${SQLPLUS_SETTINGS}
    select foo||'|'||bar ||'|'|| xyz from temp where dfg='some';
    exit;
    EOF`
Run Code Online (Sandbox Code Playgroud)

但是我怎么能在Perl中做到这一点?

unix oracle shell perl sqlplus

5
推荐指数
2
解决办法
2万
查看次数

如何使用Perl检查远程服务器上是否存在文件?

如何使用Perl检查远程服务器上是否存在文件?

我可以在使用Perl模块时执行此操作Net::FTP吗?

检查是否存在文件

if (-e $file_check) {  
    print "File Exists!\n";  
}   
else {  
    print "File Doesn't Exist!\n";  
}  
Run Code Online (Sandbox Code Playgroud)

ftp perl module

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

"锁定"在Perl中究竟做了什么?

我正在写一个Perl脚本,并注意到我的编辑器突出显示了"锁定"这个词.我很好奇,所以我查看了Perl中的"锁定",并且无法找到一个直截了当的答案(至少没有一个我完全理解的答案).

这是我找到的最佳答案:http: //perldoc.perl.org/functions/lock.html


例如:锁定THING

"在THING中包含的共享变量或引用对象上放置一个建议锁定,直到锁定超出范围."


这到底是什么意思?"锁定"功能不用于锁定文件,因为我读过的所有内容都说使用"flock",所以什么是"锁定"用于?是否与线程有关并确保同时运行的多个进程不会相互碰撞?

perl

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

Perl Tkx,"button"和"ttk__button"有什么区别?

我一直在使用Perl Tkx开发GUI,并发现可以使用两个单独的函数来创建按钮.(buttonttk__button).

到目前为止,我发现的唯一区别是button函数似乎居中对齐文本,而ttk__button函数似乎左对齐文本.


示例使用button:

#!/usr/bin/perl

use strict;
use warnings;

use Tkx;

my $text = "Hello\nworld!\n\nThis is some text...";
my $mw = Tkx::widget->new(".");

my $b = $mw->new_button(
    -text => $text,
    -command => sub { exit; },
);
$b->g_grid;

Tkx::MainLoop()
Run Code Online (Sandbox Code Playgroud)

此脚本将使文本居中:

居中的文字


示例使用ttk__button:

#!/usr/bin/perl

use strict;
use warnings;

use Tkx;

my $text = "Hello\nworld!\n\nThis is some text...";
my $mw = Tkx::widget->new(".");

my $b = $mw->new_ttk__button(
    -text => $text,
    -command => sub …
Run Code Online (Sandbox Code Playgroud)

perl user-interface tcl button tkx

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