我是 Perl 的新手,正在阅读参考资料。
我不明白如何知道他处理的变量是否是参考。
例如,如果我理解正确,这:
$b = $a
可能是分配scalars
或references
. 我们怎么知道它是什么?
In C
orC++
我们将通过函数签名(*a
or &a
of **a
)知道。但是Perl
没有参数的签名。
那么我们如何在代码中知道什么是引用,什么不是?或者如果它是对标量或数组或散列或其他引用的引用?
问问题
106 次
3 回答
9
于 2013-05-12T09:10:57.513 回答
4
你问错问题了。
虽然有一个被调用的函数ref
和另一个被调用的函数reftype
,但这些不是您应该需要使用的函数。
检查变量的类型是不好的,因为由于重载和魔法,如果不按预期实际使用它,就无法有效地知道。
例如,假设您设计了一个接受引用或字符串的函数。那将是一个糟糕的设计,因为重载字符串化的对象两者兼而有之。
一个好的接口会使用上下文来区分参数。例如,它可以根据参数的数量进行区分,
foo($point_obj)
-vs-
foo(x => $x, y => $y)
基于其他参数的值,
foo(fh => $fh)
-vs-
foo(str => $file_contents)
或基于调用的函数的选择
foo_from_fh($fh)
-vs-
foo($file_contents)
所以答案是:你知道它是一个引用,因为你的文档指示你的函数的调用者传递一个引用。如果您传递的不是引用,并且它被用作引用,调用者将得到一个严格的错误,因为他们的错误。
于 2013-05-12T12:54:49.970 回答
1
该ref
功能是您正在寻找的。文档位于http://perldoc.perl.org/functions/ref.html
ref EXPR
如果 EXPR 是引用,则返回非空字符串,否则返回空字符串。如果未指定 EXPR,将使用 $_。返回的值取决于引用所引用的事物的类型...
于 2013-05-12T09:12:36.443 回答