灵感来自我如何用数组编组哈希?我想知道Array#<<在以下代码中无法正常工作的原因是什么:
h = Hash.new{Array.new}
#=> {}
h[0]
#=> []
h[0] << 'a'
#=> ["a"]
h[0]
#=> [] # why?!
h[0] += ['a']
#=> ["a"]
h[0]
#=> ["a"] # as expected
Run Code Online (Sandbox Code Playgroud)
它是否与<<在就地更改数组的事实有关,同时Array#+创建了一个新实例?
我有一个DB视图,它基本上由两个SELECT查询组成UNION ALL,如下所示:
CREATE VIEW v AS
SELECT time, etc. FROM t1 // #1...
UNION ALL
SELECT time, etc. FROM t2 // #2...
Run Code Online (Sandbox Code Playgroud)
问题是选择表格
SELECT ... FROM v WHERE time >= ... AND time < ...
Run Code Online (Sandbox Code Playgroud)
表现真的很慢.
SELECT#1和#2都非常快,索引正确等等:当我创建视图v1和v2时:
CREATE VIEW v1 AS
SELECT time, etc. FROM t1 // #1...
CREATE VIEW v2 AS
SELECT time, etc. FROM t2 // #2...
Run Code Online (Sandbox Code Playgroud)
并且具有与上述相同的WHERE条件的相同SELECT单独工作正常.
关于哪里可能是问题以及如何解决问题的任何想法?
(仅举这一点,它是最近的Postgres版本之一.)
编辑:添加匿名查询计划(请访问@filiprem以获取指向真棒工具的链接):
V1:
Aggregate (cost=9825.510..9825.520 rows=1 width=53) (actual time=59.995..59.995 rows=1 loops=1)
-> Index Scan using …Run Code Online (Sandbox Code Playgroud) 我正在做手动join,我需要将一个参数传递给它的ON子句:
Foo.joins("LEFT OUTER JOIN bars ON foos.id = bars.foo_id AND bars.baz = #{baz}")
Run Code Online (Sandbox Code Playgroud)
有没有办法baz作为参数传递,以避免潜在的注入问题?有一种方法sanitize_sql_array,但我不知道在这种情况下如何使用它.
注意:我不能使用,where因为它不一样.
好的,所以我想创建一个散列,其中有一个空散列作为默认值.我知道,有点奇怪,但是我想我觉得它可能有用.
所以这就是我做的:
>> a = Hash.new({})
=> {}
>> a[:a][:b] = 5
=> 5
>> a
=> {}
>> a[:a]
=> {:b=>5}
>> a.keys
=> []
>> a.size
=> 0
>> a[:a].size
=> 1
Run Code Online (Sandbox Code Playgroud)
换句话说,当我检查哈希时,我没有看到哈希成员,但我可以通过它的密钥访问它.
这是预期的行为吗?这里发生了什么?
顺便说一下,这是Ruby 1.9.1,还没有尝试过早期版本.
编辑:简化示例,因为它不必是散列哈希哈希...
假设foo,bar和baz还没有被定义,则线
foo bar baz
引发此错误:
NameError (undefined local variable or method `baz' for main:Object)
在REPLs为Python,PHP和JavaScript的第一问题foo(bar(baz))是foo没有定义.为什么Ruby baz首先抱怨?
我目前在亚马逊api的结果遇到问题.
该服务返回一个包含unicode字符的字符串:在Mac上学习Objective\xE2\x80\x93C(学习系列)
使用ruby 1.9.1,甚至无法处理字符串:
REXML::ParseException: #<Encoding::CompatibilityError: incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string)>
...
Exception parsing
Line: 1
Position: 1636
Last 80 unconsumed characters:
Learn Objective–C on the Mac (Learn Series)
Run Code Online (Sandbox Code Playgroud) 这不是关于抽象类和接口之间差异的另一个问题,所以请在投票结束之前再三考虑.
我知道接口在那些不支持多重继承的OOP语言中是必不可少的 - 比如C#和Java.但那些具有多重继承的人呢?在具有多重继承的语言中,接口(作为特定语言特性)的概念是多余的吗?我猜可以使用抽象类来建立类之间的OOP"契约".
或者,更明确地说,C#和Java中的接口只是它们不支持多重继承的结果?
oop language-features abstract-class interface multiple-inheritance
除了使用一元减号进行良好的对称外,为什么在Numeric类上定义了一元加运算符?它是否具有一些实用价值,除了造成混淆,允许编写类似的东西++i(与大多数非Rubyists认为不会增加的东西不同i).
我可以想到在自定义类上定义一元加号可能很有用的场景(比如你是在创建一些性感的DSL),所以能够定义它是好的,但为什么它已经在Ruby数字上定义了?
有没有类似javadoc或rdoc来记录YAML文件,以便我们可以将它提取到HTML文档中?理想情况下使用markdown语法.
我想执行如下查询:
SELECT id, name
FROM mytable
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
Run Code Online (Sandbox Code Playgroud)
FIELD是MySQL特定的函数,'B', 'A', 'D', 'E', 'C'是来自List的值.
我尝试使用片段,但它似乎不允许仅在运行时中知道动态arity.
除了使用完全原始使用Ecto.Adapters.SQL.query,有没有办法使用Ecto的查询DSL处理这个?
编辑:这是第一个天真的方法,当然不起作用:
ids = [2, 1, 3] # this list is of course created dynamically and does not always have three items
query = MyModel
|> where([a], a.id in ^ids)
|> order_by(fragment("FIELD(id, ?)", ^ids))
Run Code Online (Sandbox Code Playgroud)