【问题标题】:How to get a reference to a 'dynamic' object call?如何获取对“动态”对象调用的引用?
【发布时间】:2011-09-02 14:04:56
【问题描述】:

好吧,我的问题不是很清楚,但我想做的是以下几点:

average = [1, 2, 3].inject(0) { |sum, el| sum + el } / this.size

由于对this的荒谬调用,上面的代码不起作用,但我想要完成的是获取对我调用注入的数组的引用。 (在本例中为 [1, 2, 3]),鉴于我对 ruby​​ 的无知,我使用 this 做到了。但是,你能告诉我怎么做吗? 没有变量引用是否有可能做到这一点?

提前致谢!

【问题讨论】:

标签: ruby arrays


【解决方案1】:

ruby 中没有这个,最接近的是 self。

这里有一些例子可以帮助你在你的路上

#example 1 not self needed numbers is the array

numbers = [1, 2, 3]

numbers.reduce(:+).to_f / numbers.size

# example 2 using tap which gives access to self and returns self
# hence why total variable is needed

total = 0
[1, 2, 3].tap {|a| total = a.reduce(:+).to_f / a.size }

# instance_eval hack which accesses self, and the block after do is an expression 
# can return the average without an extra variable

[1, 2, 3].instance_eval { self.reduce(:+).to_f / self.size } # => 2.0

到目前为止,我更喜欢示例 1

【讨论】:

  • 是的......但他希望它没有变量引用。这是主要要求...
  • 卢卡佩特是对的。我正在与 Ruby 一起玩以使其变得更好,并且我想知道我是否可以按照我描述的方式做到这一点。谢谢!
  • 好吧,在您的最新情况下,表达式返回一个数组,而不是平均计算的浮点值。
  • user766388 是的,但它也设置了总数
  • 如果你真的是一个 Ruby 初学者,那么尝试学习这种棘手的代码是没有意义的,恕我直言
【解决方案2】:

'this' 不引用数组,所以这根本不起作用。我认为不可能像您声明的那样获得对数组的引用。但是你永远不会遇到这样的问题,因为如果数组像这样硬连线到代码中,那么除数也可能也是如此,所以你可以在末尾写'/3'。

在一般情况下,如果你有一个未知大小的数组,你也会有一个数组的名称,所以你可以使用它。喜欢:

a = [1, 2, 3]
average = a.inject(0) {|sum, el| sum+el} / a.size

【讨论】:

  • 那么,简短的回答是 ruby​​ 没有这种能力?而且我同意无论如何我肯定不会需要它。我只是想知道该语言是否有语法。
猜你喜欢
  • 2010-12-19
  • 1970-01-01
  • 2017-06-08
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
相关资源
最近更新 更多