sách gpt4 ai đã đi

perl - 为什么 Perl 中的某些函数必须用括号调用而其他函数不需要?

In lại 作者:行者123 更新时间:2023-12-04 03:09:32 31 4
mua khóa gpt4 Nike

一个例子来说明是我自己的概要 Test::Version .

use Test::More;
use Test::Version 0.04;

# test blib or lib by default
version_all_ok();

done_testing;

我不必在 done_testing(); 上加上括号我可以简单地称呼它。但是,当我尝试调用 version_all_ok; (注意:第一次尝试 Dist::Zilla::Plugin::Test::Version 以这种方式失败)我收到一个错误。为什么是这样?

làm mới 也许我的例子没有我想象的那么好。我得到的实际错误是
Bareword "version_all_ok" not allowed while "strict subs" in use at t/release-test-version.t line 19.

这是完整的代码
#!/usr/bin/perl

BEGIN {
unless ($ENV{RELEASE_TESTING}) {
require Test::More;
Test::More::plan(skip_all => 'these tests are for release candidate testing');
}
}

use 5.006;
sử dụng nghiêm ngặt;
use warnings;
use Test::More;

eval "use Test::Version";
plan skip_all => "Test::Version required for testing versions"
if $@;

version_all_ok; # of course line 19, and version_all_ok() works here.
done_testing;

以下应该是从 Test::Version 1.0.0 中提取的相关片段用于导出。
use parent 'Exporter';
our @EXPORT = qw( version_all_ok ); ## no critic (Modules::ProhibitAutomaticExportation)
our @EXPORT_OK = qw( version_ok );

1 Câu trả lời

从根本上说,因为 Perl 需要知道裸字表示函数调用,以便将其解析为函数调用。 Perl 可以通过两种方式学习这个有趣的事实:

  • 您可能已经像函数调用一样修饰了裸字,在 & 前面加上或 ->或附加 (...)或两者。 Perl 将相信您知道您在说什么,并将裸字解析为函数调用,即使它还不知道它必须调用什么函数。
  • 在 Perl 尝试解析调用之前,您可能已经声明了一个具有该名称的函数。通常情况下,use - 一个模块足以确保在正确的时间创建符号;你在 Test::Version 中做错了什么这样符号直到需要编译测试脚本之后才会被导出。

  • 在您的代码中,您包装 usehiện hữu đánh giá 内,这实际上将其延迟到执行时间。因此,符号 version_all_ok当 Perl 尝试编译调用并崩溃时,它不可用。强制 đánh giá编译时间应该足以使符号可用:
    BEGIN {
    eval "use Test::Version";
    plan skip_all => "Test::Version required for testing versions"
    if $@;
    }

    关于perl - 为什么 Perl 中的某些函数必须用括号调用而其他函数不需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785462/

    31 4 0
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com