我是新来的Perl和阅读有关的参考。
我不明白如何知道他是否工作的变量是一个参考。
例如,如果我理解正确,这个:
$b = $a
可能分配scalars
或references
。我们如何知道它是哪一个?
在C
或C++
我们将通过函数签名(*a
或&a
的**a
)知道。但是在Perl
中没有参数的签名。
那么我们如何在代码中知道什么是参考,什么不是?或者,如果它是对标量或数组或散列或其他引用的引用?Perl参考。我们怎么知道它是一个?
1
A
回答
9
1
ref
功能就是你要找的。文档可在http://perldoc.perl.org/functions/ref.html
ref EXPR
返回一个非空字符串,如果EXPR是一个引用,空字符串,否则。如果未指定EXPR为 ,将使用$ _。返回的值取决于事情的类型 引用是一个参考...
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)
所以答案是:您知道这是一个参考,因为您的文档指示您的函数的调用者传递参考。如果您通过了除引用之外的其他内容并将其用作引用,则调用者将因其错误而导致严格的错误。
+0
谢谢ikegami,指出非问题! – innaM 2013-05-13 11:19:21
相关问题
- 1. readdir:我怎么知道它是一个文件还是目录
- 2. 多的AsyncTask - 我怎么知道它是哪一个“onPostExecute”
- 3. 如果我知道一个类,我怎么知道它来自哪个jar?
- 4. 如果我有两个时间段,我怎么知道它们是否重叠?
- 5. 我怎么能知道一个Perl的IO ::管
- 6. 我怎么知道它是复选框或它是无线电?
- 7. 我怎么能知道一个PrintWriter
- 8. 我们怎么能知道一个Facebook图形API领域
- 9. 我怎么知道一个对象是否是唯一的
- 10. 我们怎么知道我们仍然在TortoiseGit中关联了一个分支?
- 11. 给定一个包,我怎么知道它的artifactId应该是什么?
- 12. 我怎么知道什么TextView是clickbale?
- 13. java - 我有一个Date()。我怎么知道它是否在HH:MM之后?
- 14. 我们怎么知道我们在螺旋锁内?
- 15. 我怎么知道哪个xib是第一个加载的?
- 16. 鉴于经纬度,我怎么知道它是否是日光?
- 17. 用于事件的参数是什么?我怎么知道?
- 18. 给定一个字符串,我怎么知道它是否需要解码
- 19. 我怎么能知道,如果它是一个绝对的域名用PHP
- 20. 有一个.exe的路径,我怎么知道它是否在运行?
- 21. 我怎么知道QTreeView是空的?
- 22. 我怎么知道流是结束?
- 23. 我怎么知道哪一个是用于创建文件夹
- 24. 我是一个标题,不知道该怎么办
- 25. 我怎么能翻译这个参考
- 26. iPhone Facebook Messanger - 它怎么知道我是谁?
- 27. 我怎么知道一个属性是否是一个通用集合
- 28. iPhone - 我怎么知道一个URL是否是一个资源文件?
- 29. 你怎么知道一个函数是否返回一个值?
- 30. 我可以知道输入增量是参考(&)还是右值参考(&&)?
所以通常用这个来检查类型?但是引用什么类型? – Jim 2013-05-12 09:12:23
我不知道“常见”,但是如果您需要知道某件事是否引用了其他内容,那么这是您使用的功能。 Re:你编辑的评论:点击链接。 – Mat 2013-05-12 09:13:19
@Jim,不,这不常见。你不应该使用它。 – ikegami 2013-05-12 12:44:45