【发布时间】:2011-12-22 22:18:21
【问题描述】:
所以如果像 [] 和 []= 这样的 index_accessor 方法没有硬编码到解释器中,有没有办法直接在 Ruby 中定义这些方法?换句话说,如何定义方法名称,其中参数位于方法名称“[*]”的一部分内
我可以发誓我曾经在 Pickaxe 或 Ruby Way 中发现过这个,但数小时的翻页让我两手空空
【问题讨论】:
-
你看过
Array[]和Array[]=的源代码吗?它们是用 C 实现的。有关更多信息,请参阅Array's docs 中的源代码链接。 -
我知道它们是用 C 编写的。但是您也可以将 [] 和 []= 添加到任何自定义对象,而不仅仅是重载 Array 子类。但我认为我同意这是不可能的,因为解释器对它们进行了硬编码并且没有自定义定义的能力。 (我想知道 Rubinius 是如何用他们的整个 'Implement Ruby in Ruby' 做到的......)
-
这个问题真的不清楚。你应该给我们一些示例代码并说“这可能吗?”。
-
我发现了我认为我看到的东西,它是方法名称中的@,用于在对象之前而不是之后应用方法名称(例如“def -@”然后你可以调用“ -obj" 有效,但这似乎只适用于 + 和 - ,尽管它可以用于任何对象的任何原因。哦,好吧
标签: ruby arrays methods function