我希望用Riak在rails上设置Amazon EC/2节点.我希望能够同步riak数据库,如果集群获得查询,则能够分辨数据所在并快速检索它.在您看来,EC/2在节点之间是否足够快以查询Riak DB,返回结果,并及时将它们返回给客户端?我是所有这一切的新手,所以请善待:)
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) 有没有一种方法是真正可选的,所以我知道它是否由调用者设置了吗?
将参数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) 是否可以使用Parsley添加自定义多重验证(即依赖于多个输入的单个验证)?
我有时想验证一个<form>
或一个部分作为一个整体并在该级别而不是在该<input>
级别提供错误.
例如,假设一个表单<table>
允许用户输入颜色和大小的不同组合.说我想验证没有重复的组合.最佳方法是验证每行的行并查找其上方的重复行.如果找到重复的行,则这些整行是无效的,没有任何单独的输入实际上无效.此外,任何字段的更改都可能使该行或其他行无效.
如果我尝试添加,比如说,"tr.combination"
到inputs
选项,<table>
将不能添加fields
.看起来这些选项不会传递给构造函数,因此它不返回a ParsleyField
而是返回一个泛型Parsley
对象.
我甚至更远了构建一个ParsleyFieldMultiple
,因为选择器是硬编码的,代码高度依赖checkbox
/radio
我需要修复ActiveRecord属性的编码,并决定在before_save挂钩中执行此操作.此时我发现了一个意想不到的功能.当我想要更改属性的值时,使用简单的方法attribute_name=XY
并不像我预期的那样工作.而不是我需要使用self[:attribute_name]=XY
.到目前为止我还没有认识到这种行为AR.attribute_name=XY
.这是什么原因?这种行为是否与钩子或其他东西有关?谢谢你的解释.
这是一个很大的提交.但我希望你专注于这个改变块.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
在这种情况下,我也将有一个名为方法foo
中self
.
我错过了什么
通常,我可能会使用以下内容获取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
.
有没有办法做到这一点?
我遇到了以下代码,无法弄清楚发生了什么.
def self.eof_packet?(data)
data[0] == ?\xfe && data.length == 5
end
Run Code Online (Sandbox Code Playgroud) 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)
我很困惑,特别是因为我可以更改哈希的元素,而不会影响数组.但是当我清除哈希时,数组会被更新并清除其哈希内容.谁能解释一下?
我有一个由一对数字和一些值组成的数组:
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 ×8
activerecord ×1
amazon-ec2 ×1
arrays ×1
conditional ×1
enumerable ×1
hash ×1
metaclass ×1
nosql ×1
parsley.js ×1
range ×1
riak ×1
ruby-2.0 ×1
singleton ×1
validation ×1