gpt4 book ai didi

function - 这两个函数调用约定有什么区别?

转载 作者:行者123 更新时间:2023-12-02 16:15:14 26 4
gpt4 key购买 nike

可以通过以下两种方式调用函数:

say(1, 2, 3) # 123
say: 1, 2, 3 # (1, 2, 3)

后者似乎传递了 Positional,但是除此之外,我不知道它们之间还有什么不同。有什么重要的要知道的区别吗?您会在哪种情况下使用另一种情况?

最佳答案

正如Raiph在上面告诉您的那样,say:是一个标签。因此,您没有对say进行任何编码(即使您认为自己做到了),并且-在REPL的外部使用-编译器会提示您对<a b c>的使用是无用的:

say: <a b c>; # OUTPUT: «WARNINGS for <tmp>:␤Useless use of constant value a b c in sink context (lines 1, 1, 1, 1, 1, 1)␤»

但是,您通常可以在方法调用中使用 :表示法代替括号。考虑下面的四个例程调用(两个子例程调用,然后两个方法调用):
my @numbers = (33, 77, 49, 11, 34);
say map *.is-prime, @numbers ; # simplest subroutine call syntax
say map( *.is-prime, @numbers ); # same meaning, but delimiting args
say @numbers.map( *.is-prime ) ; # similar, but using .map *method*
say @numbers.map: *.is-prime ; # same, but using : instead of parens

这些句子都将返回相同的 (False False False True False)

通常,如上面在 map上看到的那样,无论使用 ()的位置如何,都可以在方法调用中使用 :,但事实并非如此;相反,这是不正确的。 :仅可用于方法调用中。

如果需要精确分隔参数,请使用 (),如下面的Raiph注释所示。

该答案侧重于基础知识。请参阅Raiph的答案,以更详尽地介绍例程调用语法的确切细节。 (举一个重要的例子,如果例程名称和冒号( :)或左括号( ()之间有空格,则这些调用的含义通常会发生变化。)

关于function - 这两个函数调用约定有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50222885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com