小编Mar*_*une的帖子

EC/2节点之间的速度有多快?

我希望用Riak在rails上设置Amazon EC/2节点.我希望能够同步riak数据库,如果集群获得查询,则能够分辨数据所在并快速检索它.在您看来,EC/2在节点之间是否足够快以查询Riak DB,返回结果,并及时将它们返回给客户端?我是所有这一切的新手,所以请善待:)

amazon-ec2 nosql riak

5
推荐指数
1
解决办法
422
查看次数

当你的类没有定义#each时,返回Enumerator :: Lazy的最佳方法是什么?

Enumerable#lazy依赖于你的可枚举提供#each方法.如果您的枚举没有#each方法,则无法使用#lazy.现在Kernel#enum_for,#to_enum提供指定除以下之外的枚举方法的灵活性#each:

Kernel#enum_for(method = :each, *args)
Run Code Online (Sandbox Code Playgroud)

但是#enum_for,朋友总是构建普通(非懒惰)的普查员,从不Enumerator::Lazy.

我看到Enumerator在Ruby 1.9.3中提供了类似的#new形式:

Enumerator#new(obj, method = :each, *args)
Run Code Online (Sandbox Code Playgroud)

不幸的是,在Ruby 2.0中已经完全删除了构造函数.此外,我认为它根本不可用Enumerator::Lazy.所以在我看来,如果我有一个带有方法的类,我想返回一个惰性枚举器,如果该类没有,#each那么我必须定义一些定义的辅助类#each.

例如,我有一Calendar堂课.从一开始就提出列举每一个日期对我来说真的没有意义.一个#each将是无用的.相反,我提供了一个从开始日期(懒惰)枚举的方法:

  class Calendar
    ...
    def each_from(first)
      if block_given?
        loop do
          yield first if include?(first)
          first += step
        end
      else
        EachFrom.new(self, first).lazy
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

那个EachFrom班看起来像这样:

class EachFrom
  include Enumerable
  def initialize(cal, first)
    @cal   = …
Run Code Online (Sandbox Code Playgroud)

ruby enumerable lazy-evaluation ruby-2.0

5
推荐指数
1
解决办法
928
查看次数

如何在Ruby 2.0中传递可选的命名参数

有没有一种方法是真正可选的,所以我知道它是否由调用者设置了吗?

将参数nil用作默认值是行不通的,因为无法知道调用方是否已通过nil或它是否为参数的默认值。

在命名参数之前,在Ruby 1.9中,使用options哈希:

def foo(options = {})
  # …
  bar(options)
end

def bar(options = {})      
  puts options.fetch(:name, ‘unknown’) # => 'unknown'
end
Run Code Online (Sandbox Code Playgroud)

使用Ruby 2.0命名参数:

def foo(name: nil)
  # …
  bar(name: name)
end

def bar(name: ‘unknown’)
  # …
  puts name # => nil, since nil is explicitly passed from `foo`
end
Run Code Online (Sandbox Code Playgroud)

ruby

5
推荐指数
1
解决办法
2707
查看次数

使用Parsley添加自定义多个验证

是否可以使用Parsley添加自定义多重验证(即依赖于多个输入的单个验证)?

我有时想验证一个<form>或一个部分作为一个整体并在该级别而不是在该<input>级别提供错误.

例如,假设一个表单<table>允许用户输入颜色和大小的不同组合.说我想验证没有重复的组合.最佳方法是验证每行的行并查找其上方的重复行.如果找到重复的行,则这些整行是无效的,没有任何单独的输入实际上无效.此外,任何字段的更改都可能使该行或其他行无效.

如果我尝试添加,比如说,"tr.combination"inputs选项,<table>将不能添加fields.看起来这些选项不会传递给构造函数,因此它不返回a ParsleyField而是返回一个泛型Parsley对象.

我甚至更远了构建一个ParsleyFieldMultiple,因为选择器是硬编码的,代码高度依赖checkbox/radio

validation parsley.js

5
推荐指数
1
解决办法
2099
查看次数

在before_save挂钩中更改ActiveRecord属性值

我需要修复ActiveRecord属性的编码,并决定在before_save挂钩中执行此操作.此时我发现了一个意想不到的功能.当我想要更改属性的值时,使用简单的方法attribute_name=XY并不像我预期的那样工作.而不是我需要使用self[:attribute_name]=XY.到目前为止我还没有认识到这种行为AR.attribute_name=XY.这是什么原因?这种行为是否与钩子或其他东西有关?谢谢你的解释.

ruby activerecord ruby-on-rails

4
推荐指数
1
解决办法
2910
查看次数

Module.new与class_eval

这是一个很大的提交.但我希望你专注于这个改变块.http://github.com/rails/rails/commit/d916c62cfc7c59ab6411407a05b946d3dd7535e9#L2L1304

即使不了解代码的完整上下文,我也无法想到我将使用的场景

include Module.new {
  class_eval <<-RUBY
    def foo
       puts 'foo'
    end
  RUBY
}
Run Code Online (Sandbox Code Playgroud)

然后最终结果是在根上下文(之前的自我include Module.new)中foo添加了一个被调用的方法.

如果我拿出的Module.new代码,如果我只留下class_eval在这种情况下,我也将有一个名为方法fooself.

我错过了什么

ruby metaprogramming ruby-on-rails

4
推荐指数
1
解决办法
729
查看次数

给定一个Ruby对象的实例,我如何获得它的元类?

通常,我可能会使用以下内容获取Ruby对象的特定实例的元类:

class C
  def metaclass
    class << self; self; end
  end
end

# This is this instance's metaclass.
C.new.metaclass => #<Class:#<C:0x01234567>>

# Successive invocations will have different metaclasses,
# since they're different instances.
C.new.metaclass => #<Class:#<C:0x01233...>>
C.new.metaclass => #<Class:#<C:0x01232...>>
C.new.metaclass => #<Class:#<C:0x01231...>>
Run Code Online (Sandbox Code Playgroud)

假设我只想知道任意类的任意对象实例的元obj类,并且我不想metaclass在类的上定义(或类似)方法obj.

有没有办法做到这一点?

ruby singleton metaprogramming metaclass

4
推荐指数
2
解决办法
654
查看次数

什么呢?\ xfe意味着红宝石?

我遇到了以下代码,无法弄清楚发生了什么.

def self.eof_packet?(data)
  data[0] == ?\xfe && data.length == 5
end
Run Code Online (Sandbox Code Playgroud)

ruby

3
推荐指数
1
解决办法
2201
查看次数

为什么清除我的哈希值,也清除我的哈希数组?

ruby-1.9.2-p180 :154 > a = []
 => []
ruby-1.9.2-p180 :154 > h = {:test => "test"}
 => {:test=>"test"} 
ruby-1.9.2-p180 :155 > a << h
 => [{:test=>"test"}] 
ruby-1.9.2-p180 :156 > h.clear
 => {} 
ruby-1.9.2-p180 :157 > a
 => [{}] 
Run Code Online (Sandbox Code Playgroud)

我很困惑,特别是因为我可以更改哈希的元素,而不会影响数组.但是当我清除哈希时,数组会被更新并清除其哈希内容.谁能解释一下?

ruby arrays hash

3
推荐指数
1
解决办法
242
查看次数

将一系列数字转换为条件/范围

我有一个由一对数字和一些值组成的数组:

a = [[2, :foo], [5, :bar], ..., [17, :baz]]
Run Code Online (Sandbox Code Playgroud)

其中可以假设没有两对具有相同的数字,并且这些对按其数字的值排序.基于这个数组a,我想传递一个数字i,它始终位于最小数字和最大数字之间a,并返回与数字配对的值,该数字是不超过的最大数字i.一些预期的回报值是:

2 # => :foo
4 # => :foo
5 # => :bar
17 # => :baz
Run Code Online (Sandbox Code Playgroud)

做这个的最好方式是什么?使用散列在处理范围作为键时存在问题,并且使用case语句很难动态采用to a.

ruby conditional range

3
推荐指数
1
解决办法
69
查看次数