在Fortran中,有两种标准方法可以从函数返回结果.第一种方法是将函数的返回值赋给函数名.
function foo()
integer :: foo
foo = 10
end function foo
Run Code Online (Sandbox Code Playgroud)
在Fortran 90中标准化的第二种形式是通过"结果"变量.
function foo result(res)
integer :: res
res = 10
end function foo
Run Code Online (Sandbox Code Playgroud)
调用函数的任何一种形式都会返回值10.我的问题是,Fortran 90委员会引入结果变量的理由是什么?他们是否标准化了一种常规做法?或者他们通过不将函数名称绑定到函数结果来允许程序更加模块化.例如,在第二个版本中foo(),函数的名称foo()可以更改为bar(),并且函数在调用时仍将按预期工作.
但是,我可能错了.有谁知道引入结果变量的实际理由是什么?
我正在浏览K&R C,我注意到要阅读目录中的条目,他们使用:
while (read(dp->fd, (char *) &dirbuf, sizeof(dirbuf)) == sizeof(dirbuf))
/* code */
Run Code Online (Sandbox Code Playgroud)
dirbuf系统特定的目录结构和dp->fd有效的文件描述符在哪里.在我的系统上,dirbuf本来是一个struct linux_dirent.请注意,a struct linux_dirent具有用于条目名称的灵活数组成员,但是为了简单起见,我们假设它没有.(在这种情况下处理灵活的阵列成员只需要一些额外的样板代码).
但是,Linux不支持这种结构.当read()用于尝试如上所述读取目录条目时,read()返回-1并errno设置为EISDIR.
相反,Linux专门用于读取目录的getdents()系统调用,即系统调用.但是,我注意到它的工作方式与上面几乎相同.
while (syscall(SYS_getdents, fd, &dirbuf, sizeof(dirbuf)) != -1)
/* code */
Run Code Online (Sandbox Code Playgroud)
这背后的理性是什么?与read()在K&R中使用相比,似乎没有什么好处或没有好处.
假设我有一些Python代码:
class Mother:
def __init__(self):
print("Mother")
class Father:
def __init__(self):
print("Father")
class Daughter(Mother, Father):
def __init__(self):
print("Daughter")
super().__init__()
d = Daughter()
Run Code Online (Sandbox Code Playgroud)
此脚本打印"女儿".反正是否确保调用基类的所有__init__方法?我想出的一个方法是:
class Daughter(Mother, Father):
def __init__(self):
print("Daughter")
for base in type(self).__bases__:
base.__init__(self)
Run Code Online (Sandbox Code Playgroud)
这个脚本打印"女儿","母亲","父亲".使用super()或其他方法有一个很好的方法吗?
我在bash中遇到了一个相当神秘的错误,我怀疑它与shell扩展规则有关.
这就是故事:在工作中,我的任务是记录一个用于协调公司资源的大型内部网站.不幸的是,代码非常难看,因为它已经超出了它的原始目的,并"演变"为协调公司工作的主要资源.
大多数代码都是PHP.我写了一些帮助脚本来帮助我编写文档; 例如,一个脚本提取php函数中使用的所有全局php变量.
所有这些脚本的核心是"extract_function.sh"脚本.基本上,给定一个php函数名称和一个php源文件,它提取并输出该php函数.
现在问题出现了:不知何故,当脚本提取函数时,它基本上是在输出中ls /随机插入输出.
例如:
$ ./extract_function my_function my_php_file.php
function my_function {
// php code
/etc
/bin
/proc
...
// more php code
}
Run Code Online (Sandbox Code Playgroud)
更令人困惑的是,我只是从一个特定文件中获得了一个特定功能!现在,因为功能非常庞大(500多行,我的意思是当我说代码很丑!)时,我无法让我的生活找出造成这种情况的原因,或者想出来一个更简单的ad-hoc函数来产生这种行为.此外,公司政策阻止我分享实际代码.
但是,这是我的代码:
#!/usr/bin/env bash
program_name=$(basename $0);
function_name=$1;
file_name=$2;
if [[ -z "$function_name" ]]; then
(>&2 echo "Usage: $program_name function_name [file]")
exit 1
fi
if [[ -z "$file_name" ]] || [ "$file_name" = "-" ]; then
file_name="/dev/stdin";
fi
php_lexer_file=$(mktemp)
trap "rm -f $php_lexer_file" EXIT
read -r -d '' php_lexer_text << 'EOF'
<?php …Run Code Online (Sandbox Code Playgroud)