这有点复杂,但请耐心等待.我正在尝试创建一个地图,将音符的名称与相应的频率相关联.然后我想编写一个函数,当提供随机频率时,将返回最接近该频率的音符.
这个问题是音符的频率不是用线性公式生成的,因此每个音符之间的确切中间频率也不是线性的.(这基本上意味着音符之间的中点不完全在中间,因此通过常规方法找到中点不起作用.)
一些示例代码用于生成注释地图:
// 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) 我正在开发一个仅标头的库,并希望使用 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) 使用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正则表达式捕获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) 我正在编写一个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)可按预期工作.:)
我正在尝试使用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无法推导类型。
我正在尝试使用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中做到这一点?
如何使用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) 我正在写一个Perl脚本,并注意到我的编辑器突出显示了"锁定"这个词.我很好奇,所以我查看了Perl中的"锁定",并且无法找到一个直截了当的答案(至少没有一个我完全理解的答案).
这是我找到的最佳答案:http: //perldoc.perl.org/functions/lock.html
例如:锁定THING
"在THING中包含的共享变量或引用对象上放置一个建议锁定,直到锁定超出范围."
这到底是什么意思?"锁定"功能不用于锁定文件,因为我读过的所有内容都说使用"flock",所以什么是"锁定"用于?是否与线程有关并确保同时运行的多个进程不会相互碰撞?
我一直在使用Perl Tkx开发GUI,并发现可以使用两个单独的函数来创建按钮.(button和ttk__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)