我开始深入研究Perl,但是在编写"Perl-ly"代码时遇到了麻烦,而不是在Perl中编写C语言.如何更改以下代码以使用更多Perl习语,我应该如何学习习语?
只是解释它正在做什么:这个程序是一个模块的一部分,它对齐DNA或氨基酸序列(如果你关心这些事情,使用Needelman-Wunch).它创建了两个2d数组,一个用于存储两个序列中每个位置的分数,另一个用于跟踪路径,因此可以在以后重新创建得分最高的对齐.它工作正常,但我知道我并没有非常简洁明了地做事.
编辑:这是作业.我完成了它,但想要清理一下我的代码.如果您有兴趣,可以在课堂网站上找到有关实施算法的详细信息.
sub create_matrix {
my $self = shift;
#empty array reference
my $matrix = $self->{score_matrix};
#empty array ref
my $path_matrix = $self->{path_matrix};
#$seq1 and $seq2 are strings set previously
my $num_of_rows = length($self->{seq1}) + 1;
my $num_of_columns = length($self->{seq2}) + 1;
#create the 2d array of scores
for (my $i = 0; $i < $num_of_rows; $i++) {
push(@$matrix, []);
push(@$path_matrix, []);
$$matrix[$i][0] = $i * $self->{gap_cost};
$$path_matrix[$i][0] = 1;
}
#fill out the first row …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的文档:
{
"_id" : ObjectId("56fea43a571332cc97e06d9c"),
"sections" : [
{
"_id" : ObjectId("56fea43a571332cc97e06d9e"),
"registered" : [
"123",
"e3d65a4e-2552-4995-ac5a-3c5180258d87"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想删除只有特定部分'e3d65a4e-2552-4995-ac5a-3c5180258d87'的registered数组中的._id'56fea43a571332cc97e06d9e'
我目前的尝试是这样的,但它只是返回未修改的原始文档.
db.test.findOneAndUpdate(
{
$and: [
{'sections._id': ObjectId('56fea43a571332cc97e06d9e')},
{'sections.registered': 'e3d65a4e-2552-4995-ac5a-3c5180258d87'}
]
},
{
$pull: {
$and: [
{'sections._id': ObjectId('56fea43a571332cc97e06d9e')},
{'sections.registered': 'e3d65a4e-2552-4995-ac5a-3c5180258d87'}
]
}
})
Run Code Online (Sandbox Code Playgroud)
我已经查看了$pull,但我似乎无法弄清楚如何使它适用于包含另一个数组的嵌套对象数组.这些$pull例子似乎只涉及一个嵌套级别.如何删除从匹配条目registered的项目阵列中sections与阵列_id,我的供应?
我的Drupal站点有一个相当复杂的部署设置,它是CVS和SVN的组合.我们使用CVS来获取最新版本的模块,并使用SVN进行部署.不幸的是,当CVS更新删除文件时,Subversions会抱怨因为它们没有在SVN中删除.我正在尝试做一些shell脚本和Perl来运行svn rm已经从文件系统中删除的所有这些文件的命令,但我还没有走得太远.到目前为止我所拥有的是:
svn st | grep !
Run Code Online (Sandbox Code Playgroud)
这将输出从文件系统中删除的所有文件的列表,如下所示:
! panels_views/panels_views.info
! panels_views/panels_views.admin.inc
! contexts/term.inc
! contexts/vocabulary.inc
! contexts/terms.inc
! contexts/node_edit_form.inc
! contexts/user.inc
! contexts/node_add_form.inc
! contexts/node.inc
etc. . .
Run Code Online (Sandbox Code Playgroud)
但是,我想以某种方式svn del在每一行上运行.如何将此输出添加到我的Perl脚本中,或者如何svn del在这些行中运行?
编辑:我使用的确切命令,在所有人的帮助下,是
svn st | grep ^! | cut -c 9- | xargs svn del
Run Code Online (Sandbox Code Playgroud) 我对这件事的运作方式很好奇.
在要求'sinatra'之后
然后我可以在顶级范围内调用get().
在深入研究源代码后,我发现了这个get()结构
module Sinatra
class << self
def get
...
end
end
end
Run Code Online (Sandbox Code Playgroud)
知道类<< self是打开self对象的单例类定义并在里面添加get(),所以它开始有意义.
但唯一遗漏的是我无法理解的是它在模块Sinstra中,如何在不使用Sinatra :: resolution操作的情况下调用get()?
我对Ruby中的对象赋值和指针感到有点困惑,并编写了这个代码片段来测试我的假设.
class Foo
attr_accessor :one, :two
def initialize(one, two)
@one = one
@two = two
end
end
bar = Foo.new(1, 2)
beans = bar
puts bar
puts beans
beans.one = 2
puts bar
puts beans
puts beans.one
puts bar.one
Run Code Online (Sandbox Code Playgroud)
我曾经假设当我将bar分配给bean时,它会创建一个对象的副本,而修改一个不会影响另一个.唉,输出显示不然.
^_^[jergason:~]$ ruby test.rb
#<Foo:0x100155c60>
#<Foo:0x100155c60>
#<Foo:0x100155c60>
#<Foo:0x100155c60>
2
2
Run Code Online (Sandbox Code Playgroud)
我相信这些数字与对象的地址有关,并且对于bean和bar都是相同的,当我修改bean时,bar也会被改变,这不是我所期望的.看来我只是创建一个指向对象的指针,而不是它的副本.在分配时复制对象而不是创建指针需要做什么?
使用Array类进行的测试也显示了一些奇怪的行为.
foo = [0, 1, 2, 3, 4, 5]
baz = foo
puts "foo is #{foo}"
puts "baz is #{baz}"
foo.pop
puts "foo is #{foo}"
puts "baz is #{baz}"
foo …Run Code Online (Sandbox Code Playgroud) 在Ruby中这样做的正确方法是什么?
def callOrElse(obj, method, default)
if obj.respond_to?(method)
obj.__send__(method)
else
default
end
end
Run Code Online (Sandbox Code Playgroud) 我试图解析一个文本文件,每行包含可变数量的单词和数字,如下所示:
foo 4.500 bar 3.00
1.3 3 foo bar
Run Code Online (Sandbox Code Playgroud)
如何读取由空格而不是换行符分隔的文件?有没有什么方法可以设置File("file.txt").foreach方法使用空格而不是换行符作为分隔符?
我有一些工作Javascript来操纵一些DOM元素.问题是,我不明白它为什么会起作用,这从来都不是一件好事.我正在尝试更多地了解面向对象的javascript和javascript最佳实践,因此组织可能看起来有点奇怪.
基本上,我包装了两个操纵CSContent对象内部DOM的方法.我创建对象的实例,content在$(document).ready并绑定一些事件中的功能content.但是,我很困惑如何在$(document).ready退出后仍然可以调用这些函数.这是不是意味着content已超出范围,其功能不可用?无论如何,这是代码:
function CSContent() {
var tweetTextArea = document.getElementById('cscontent-tweet'),
tweetTextElement = document.getElementById('edit-cscontent-cs-content-tweet'),
charCountElement = document.getElementById('cscontent-tweet-charactercount');
this.toggleTweetTextarea = function () {
$(tweetTextArea).slideToggle();
};
this.updateTweetCharacterCount = function () {
var numOfCharsLeft = 140 - tweetTextElement.value.length;
if (numOfCharsLeft < 0) {
$(charCountElement).addClass('cscontent-negative-chars-left');
}
else {
$(charCountElement).removeClass('cscontent-negative-chars-left');
}
charCountElement.innerHTML = '' + numOfCharsLeft + ' characters left.';
};
}
$(document).ready(function () {
var content = new CSContent();
//If the twitter …Run Code Online (Sandbox Code Playgroud) ruby从内部调用方法重新运行的正确方法是什么在下面的示例中当@dest_reenter等于yes时我希望b_stage方法再次执行
def b_stage
if @dest_reenter == 'yes'
@dest_reenter = nil
b_stage
end
end
Run Code Online (Sandbox Code Playgroud) 我正在阅读关于.each迭代器的Ruby问题,有人说.each如果高阶迭代器更适合任务,使用可能是代码气味.Ruby中的高阶迭代器是什么?
编辑: JörgWMittag,我提到的StackOverflow答案的作者提到他打算编写更高级别的迭代器,但他也解释了它们在下面的内容.