Tag: 范围

Ruby的范围步骤方法导致执行速度非常慢?

我有这段代码: date_counter = Time.mktime(2011,01,01,00,00,00,”+05:00″) @weeks = Array.new (date_counter..Time.now).step(1.week) do |week| logger.debug “WEEK: ” + week.inspect @weeks << week end 从技术上讲,代码工作,输出: Sat Jan 01 00:00:00 -0500 2011 Sat Jan 08 00:00:00 -0500 2011 Sat Jan 15 00:00:00 -0500 2011 etc. 但执行时间完全是垃圾! 每周计算大约需要4秒钟。 我在这段代码中遗漏了一些怪诞的低效率吗? 看起来很简单。 我正在使用Rails 3.0.3运行Ruby 1.8.7。

什么是本地范围?

说实话,我仍然对实例变量和局部变量感到困惑,不确定应该使用哪个。 我所知道的只有一个不能使用的局部变量的条件是: class MyClass def initialize local_var = 1 @instance_var = 1 end def show_local_var local_var end def show_instance_var @instance_var end end 显然, MyClass.new.show_instance_var工作,而MyClass.new_show_local_var没有 关于这两种变量的另一件事是块似乎共享相同的局部范围,因此可以引用局部变量: local_var = 1 3.times do puts local_var end 关于这些区别,我所知道的还有其他可用的吗? 请告诉我 如果有任何关于此的文章,那将对我有所帮助,

ruby如何处理数组范围访问?

ruby-1.8.7-p174 > [0,1][2..3] => [] ruby-1.8.7-p174 > [0,1][3..4] => nil 在0索引设置中,索引2,3和4实际上都超出了2项数组的范围,为什么它们会返回不同的值?

ruby:如何在本地上下文中加载.rb文件

如何在Ruby中完成这个简单的任务? 我有一些简单的配置文件 === config.rb config = { ‘var’ => ‘val’ } 我想从main.rb文件中定义的某个方法加载配置文件,以便config.rb中的局部变量成为该方法的本地变量。 像这样的东西: === main.rb Class App def loader load(‘config.rb’) # or smth like that p config[‘var’] # => “val” end end 我知道我可以在config.rb使用全局变量然后在完成后config.rb定义它们,但我希望有一种ruby方式)

如何使块本地变量成为ruby 1.9中的默认值?

Ruby 1.9提供了定义块的本地变量而不关闭外部作用域中同名变量的能力: x = 10 proc { |;x| x = 20 }.call x #=> 10 我希望将此行为作为我定义的某些块的默认行为 – 而不必使用|; x,y,z | 语法(注意分号)。 我不认为Ruby允许这种本地,但是有可能破解这个function吗? 我目前有一个解决方案,但它非常难看,因为它需要检查在块结束时查看哪些局部变化,然后将它们恢复为块之前的值。 我不介意你的解决方案是否需要在块的开头指定哪些变量是块本地的,即scope(:x) { x = 20 }

如何随机迭代一个大范围?

我想随机迭代一个范围。 每个值只访问一次,最终将访问所有值。 例如: class Array def shuffle ret = dup j = length i = 0 while j > 1 r = i + rand(j) ret[i], ret[r] = ret[r], ret[i] i += 1 j -= 1 end ret end end (0..9).to_a.shuffle.each{|x| f(x)} 其中f(x)是对每个值进行操作的某个函数。 Fisher-Yates shuffle用于有效地提供随机排序。 我的问题是shuffle需要在数组上运行,这并不酷,因为我正在使用天文数字大的数字。 Ruby会快速消耗大量的RAM,试图创建一个怪异的数组。 想象一下用(0..9) (0..99**99)替换(0..9) (0..99**99) 。 这也是以下代码不起作用的原因: tried = {} […]

更改ruby变量/引用的值

我偶然发现了一些我不太了解的事情。 我知道ruby中的变量是引用。 所以很棒的东西是可能的。 但是当我将变量传递给方法时,它表现得很奇怪: my_var_a = “nothing happend to me” my_var_b = “nothing happend to me” def parse_set(my_var_set) my_var_set = “my value changed” end def parse_sub(my_var_sub) my_var_sub.sub! /(.*)/, “my value changed” end parse_set(my_var_a) parse_sub(my_var_b) my_var_a # => “nothing happend to me” my_var_b # => “my value changed” 你能解释一下为什么它适用于sub! 和=保持对象不变? 我怎么能避免使用sub! 但结果相同?

Rails:如何使用scope来查找数组数组中的元素

我有一组数组,如[[“2″,”3”], [“3″,”1”], [“6”, “1”]] 。 每个子arrays的第一个元素是用户ID,第二个元素是用户为事件保留的席位数。 我想让每个用户通过在数组中查找他的ID来查看他的预订。 假设我有两个模型:用户和事件。 在用户控制器中,我想使用像@mybooking = Event.mybooking(current_user.id)这样的范围,问题是如何在事件模型中编写适当的范围? 并且,如果找到用户,我也想使用它的第二个元素。 我尝试了不同的解决方案,但没有奏效! 如果您认为使用示波器是不可能的,并且您有另一种解决方案,请告诉我。 编辑:由于我还在等待一个有效的解决方案,我应该提一下,我正在寻找这样的东西: scope :mybookings, ->(id){where(“reservations.to_enum.map{|n,m| n} ?”, id)} 要么 scope :mybookings, ->(id) { where(“reservations.map(&:first) ?”, id) } 由于与“……”部分相关的错误,这两个不起作用。 并且,下面的解决方案不正确,因为我从用户控制器调用事件的范围,并且不能在该控制器中使用reservations ,因为此变量用于事件控制器。

如何访问此变量?

class Player def getsaves print “Saves: ” saves = gets end def initialize(saves, era, holds, strikeouts, whip) end end 我有上面的代码……让我说我然后写。 j = Player.new(30, 30, 30, 30, 30) 我想在getsaves访问getsaves变量当我在类范围之外时,我该怎么做?: puts saves variable that is inside getsaves

在Ruby中inheritance类级实例变量?

我希望子类从其父级inheritance类级实例变量,但我似乎无法弄明白。 基本上我正在寻找这样的function: class Alpha class_instance_inheritable_accessor :foo # @foo = [1, 2, 3] end class Beta < Alpha @foo << 4 def self.bar @foo end end class Delta < Alpha @foo << 5 def self.bar @foo end end class Gamma < Beta @foo << 'a' def self.bar @foo end end 然后我想要这样输出: > Alpha.bar # [1, 2, […]