小编Mla*_*vić的帖子

Ruby方法Array#<<不用哈希更新数组

灵感来自我如何用数组编组哈希?我想知道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#+创建了一个新实例?

ruby arrays hash

14
推荐指数
1
解决办法
1437
查看次数

慢慢查询"UNION ALL"视图

我有一个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)

sql postgresql indexing performance union-all

14
推荐指数
3
解决办法
2万
查看次数

Rails 4中的参数化连接

我正在做手动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因为它不一样.

parameters ruby-on-rails left-join ruby-on-rails-4

14
推荐指数
2
解决办法
4029
查看次数

为什么Hash.new({})会隐藏哈希成员?

好的,所以我想创建一个散列,其中有一个空散列作为默认值.我知道,有点奇怪,但是我想我觉得它可能有用.

所以这就是我做的:

>> 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,还没有尝试过早期版本.

编辑:简化示例,因为它不必是散列哈希哈希...

ruby hash default

12
推荐指数
1
解决办法
300
查看次数

为什么Ruby会在线上提出最后一个未定义变量的错误?

假设foo,barbaz还没有被定义,则线

foo bar baz

引发此错误:

NameError (undefined local variable or method `baz' for main:Object)

在REPLs为Python,PHP和JavaScript的第一问题foo(bar(baz))foo没有定义.为什么Ruby baz首先抱怨?

ruby interpreter operator-precedence

11
推荐指数
1
解决办法
107
查看次数

如何使用ruby 1.9转换字​​符编码

我目前在亚马逊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)

ruby encoding amazon

10
推荐指数
2
解决办法
2万
查看次数

接口是多余的多重继承?

这不是关于抽象类和接口之间差异的另一个问题,所以请在投票结束之前再三考虑.

我知道接口在那些不支持多重继承的OOP语言中是必不可少的 - 比如C#和Java.但那些具有多重继承的人呢?在具有多重继承的语言中,接口(作为特定语言特性)的概念是多余的吗?我猜可以使用抽象类来建立类之间的OOP"契约".

或者,更明确地说,C#和Java中的接口只是它们不支持多重继承的结果?

oop language-features abstract-class interface multiple-inheritance

10
推荐指数
4
解决办法
770
查看次数

Ruby中一元加运算符有什么意义?

除了使用一元减号进行良好的对称外,为什么在Numeric类上定义了一元加运算符?它是否具有一些实用价值,除了造成混淆,允许编写类似的东西++i(与大多数非Rubyists认为不会增加的东西不同i).

我可以想到在自定义类上定义一元加号可能很有用的场景(比如你是在创建一些性感的DSL),所以能够定义它是好的,但为什么它已经在Ruby数字上定义了?

ruby language-design unary-operator

9
推荐指数
2
解决办法
1569
查看次数

记录yaml

有没有类似javadoc或rdoc来记录YAML文件,以便我们可以将它提取到HTML文档中?理想情况下使用markdown语法.

documentation yaml javadoc rdoc

9
推荐指数
1
解决办法
3354
查看次数

具有可变arity的Ecto查询和自定义MySQL函数

我想执行如下查询:

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)

mysql elixir arity ecto

9
推荐指数
1
解决办法
861
查看次数