小编Gio*_*iuc的帖子

Fortran中结果变量的用途是什么?

在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(),并且函数在调用时仍将按预期工作.

但是,我可能错了.有谁知道引入结果变量的实际理由是什么?

fortran fortran90 fortran95

9
推荐指数
1
解决办法
2318
查看次数

为什么Linux在目录而不是read()上使用getdents()?

我正在浏览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()返回-1errno设置为EISDIR.

相反,Linux专门用于读取目录的getdents()系统调用,即系统调用.但是,我注意到它的工作方式与上面几乎相同.

while (syscall(SYS_getdents, fd, &dirbuf, sizeof(dirbuf)) != -1)
    /* code */
Run Code Online (Sandbox Code Playgroud)

这背后的理性是什么?与read()在K&R中使用相比,似乎没有什么好处或没有好处.

c unix architecture linux filesystem-access

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

有没有办法使用super()来调用Python中每个基类的__init__方法?

假设我有一些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()或其他方法有一个很好的方法吗?

python oop inheritance super python-3.x

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

为什么bash在输出中插入"ls /"的输出?

我在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)

php bash shell quoting

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