【问题标题】:What does [] mean here?[] 在这里是什么意思?
【发布时间】:2011-08-11 06:28:40
【问题描述】:
$self->[UTF8] = $conf->{utf8};

以前从未见过这样的代码。

[] 在这里是什么意思?

【问题讨论】:

    标签: perl


    【解决方案1】:

    在这种情况下,对象$self 被实现为祝福数组引用,而不是使用祝福哈希引用的更常见的方法。语法$foo->[42] 访问数组引用中的单个元素。据推测,UTF8 是一个常量,它返回数组的数字索引。

    当人们确信(通常是错误地)对象属性上的哈希查找会导致大量开销并试图过早地优化他们的代码时,您有时会看到这种习惯用法。

    【讨论】:

    • 基于数组的对象至少有两个好处: 索引中没有拼写错误,因为索引使用了常量。没有多重继承,强制使用角色。
    • 可能受祝福,命名为$self,但它可能只是一个普通的被诅咒的数组引用。
    • friedo,你确定这是不正确的。我已经完成了基准测试——当然,如果有的话,节省的费用会被方法调度抹去。
    • Axeman,这就是我的意思。数组查找将比哈希查找更快,但这不是代码中的瓶颈所在。因此,通常最好进行优化以提高清晰度并使用标准惯用语,而不是实际上不会帮助您提高程序速度的巧妙技巧。
    【解决方案2】:

    [] 暗示 $self 是对列表/数组的引用(假设代码有效)。不过,这看起来有点奇怪,因为列表索引应该是数字的。

    【讨论】:

    • UTF8 可能是一个常数。我们做这种事情是为了在 perl 中实现记录/类。使用 arrayref 作为您的对象和索引的常量。比使用哈希更安全、更高效。
    • @Sodved:我觉得UTF8 可能是一个常数。不过,它几乎看起来像一个错误。部分原因是我认为我不会使用数组引用作为这样的对象。
    猜你喜欢
    • 2011-07-25
    • 2021-04-14
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多