"Exit Sub"或"Return"似乎都完成了同样的事情 - 退出子程序.他们的工作方式有何不同?
那是,
Private Sub exitNow()
Exit Sub
End Sub
Run Code Online (Sandbox Code Playgroud)
要么
Private Sub exitNow()
Return
End Sub
Run Code Online (Sandbox Code Playgroud) 我听说人们不应该&用来调用Perl subs,即:
function($a,$b,...);
# opposed to
&function($a,$b,...);
Run Code Online (Sandbox Code Playgroud)
我知道一个参数列表变成可选的,但在某些情况下哪些是适合使用的,&以及你绝对不应该使用它的情况?
当省略时,性能增加如何发挥作用&呢?
我定义了以下子例程:
Sub EnterCellValueMonthNumber(cells As range, number As Integer)
range(cells).Select
ActiveCell.FormulaR1C1 = number
End Sub
Run Code Online (Sandbox Code Playgroud)
当我像这样调用子程序时:
EnterCellValueMonthNumber ("N23:Q23",1)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Compile error Expected: =
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我收到这条消息.有谁知道我错过了什么?
我看过的许多Haskell教程几乎完全集中在语法上,而对如何构建程序的报道却很少.
例如...
这是C++应用程序的简要概述:
#include <iostream>
using namespace std;
int addition (int a, int b)
{
int r;
r=a+b;
return (r);
}
int main ()
{
int z;
z = addition (5,3);
cout << "The result is " << z;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我第一次开始学习C++时,这些例子极大地帮助我学习如何将各个部分组合成工作程序.也许我正在寻找错误的地方,但我找不到任何像Haskell那样直接和简单的例子.
我已经知道很多Haskell语法.我可以编写递归列表推导,并操纵字符串,整数和列出wazoo.
简而言之:我只想知道Haskell中两个子例程和变量传递是什么样的.如果我能够对如何构造Haskell程序有一些基本的了解,我可能最终能够将我学到的所有语法都用于某些用途.
可能重复: 如何将一个数组和一个字符串作为参数传递给函数?
我有一个函数或子例程,它将第一个参数作为数组,第二个参数作为标量.例如,
sub calc {
my @array = $_[0];
my $scalar = $_[1];
print @array, $scalar;
}
Run Code Online (Sandbox Code Playgroud)
问题是该函数使数组等于传入的数组的第一个值,并且标量是传入的数组的第二个值.当我想要第一个数组是整个数组时,我不知道需要制作数组的深层副本.例如,
my @array = ('51', 'M');
my $scalar = 21;
Run Code Online (Sandbox Code Playgroud)
和
calc(@array, $scalar)
Run Code Online (Sandbox Code Playgroud)
会51 M在我想要的时候打印51 M 21.
我最近在向Fortran程序添加函数时学习了tinterface块.一切都很好,整洁,但现在我想在接口块中添加第二个功能.
这是我的界面块:
interface
function correctNeighLabel (A,i,j,k)
integer :: correctNeighLabel
integer, intent(in) :: i,j,k
integer,dimension(:,:,:),intent(inout) :: A
end function
function correctNeighArray (B,d,e,f)
character :: correctNeighArray
integer, intent(in) :: d,e,f
character, dimension(:,:,:),intent(inout) :: B
end function
end interface
Run Code Online (Sandbox Code Playgroud)
在我看来,这可能不是最好的选择.
我已经研究过子程序,但我不太相信它是正确的解决方案.我正在做的是相对简单的,我需要将参数传递给子例程,但我看到的所有子例程都是a)复杂的(即函数太复杂),和b)不接受参数,它们表现得好像他们操纵变量而不将它们传递给它们.
我没有真正正确地研究模块,但从我所看到的不适合使用的模块.
我应该在哪个时候使用,以及如何最好地使用它?
我之前已经问过这个问题或者搜查过其他人问过 - 为什么我收到警告" 子程序mySub重新定义在../lib/Common.pm第x行 "?并且你总是得到你在同一个代码中声明sub两次的答案.我创建了这个测试包:
整个文件---------------
package MyCommonPkg;
use strict;
sub thisSubroutineIsNotDefinedAnywhereElse{
}
1;
Run Code Online (Sandbox Code Playgroud)
整个文件---------------
我使用perl脚本使用这个包,它使用其他包,也使用这个包,我得到警告:
子程序ThisSubroutineIsNotDefinedAnywhereElse在../lib/MyCommonPkg.pm第19行重新定义.
我保证我没有在其他地方声明这个子.这是由循环引用引起的吗?如何跟踪此警告的原因并进行修复?
不确定标题是否放好.建议欢迎.
这就是我想要做的.检查一个条件,然后决定在循环中使用哪个函数.例如:
if (a < 0) then
loop_func = func1
else
loop_func = func2
endif
Run Code Online (Sandbox Code Playgroud)
然后我可以loop_func在编写循环时用作指针.这两个函数都采用完全相同的输入,并且是基于值的解决问题的不同方法a.这将允许我只有一个代码块,而不是两个几乎相同的块.这也适用于子程序.
有什么想法可以实现吗?
谢谢.
我被要求修改一些现有代码以添加一些额外的功能.我在Google上搜索过,似乎无法找到答案.我有一些这样的效果......
%first_hash = gen_first_hash();
%second_hash = gen_second_hash();
do_stuff_with_hashes(%first_hash, %second_hash);
sub do_stuff_with_hashes
{
my %first_hash = shift;
my %second_hash = shift;
# do stuff with the hashes
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Odd number of elements in hash assignment at ./gen.pl line 85.
Odd number of elements in hash assignment at ./gen.pl line 86.
Use of uninitialized value in concatenation (.) or string at ./gen.pl line 124.
Use of uninitialized value in concatenation (.) or string at ./gen.pl line 143.
Run Code Online (Sandbox Code Playgroud)
第85行和第86行是子例程中的前两行,124和143是我访问哈希的地方.当我查找这些错误时,似乎暗示我的哈希值未初始化.但是,我可以验证哈希值是否有值.为什么我会收到这些错误?
以编程方式发现perl模块具有的所有子例程的最佳方法是什么?这可以是一个模块,一个类(没有@EXPORT),或者介于两者之间的任何东西.
编辑:下面的所有方法看起来都可以.我可能在生产中使用Class :: Sniff或Class :: Inspector.然而,莱昂的回答被标记为"被接受",因为它回答了提出的问题,即使no strict 'refs'必须使用.:-) Class :: Sniff可能是一个很好的选择,因为它的进展; 看起来很多想法已经进入其中.
subroutine ×10
perl ×5
function ×3
fortran ×2
alias ×1
excel ×1
fortran90 ×1
hash ×1
haskell ×1
module ×1
parameters ×1
perl-module ×1
pointers ×1
reference ×1
reflection ×1
return ×1
syntax ×1
vb.net ×1
vba ×1