小编ove*_*awn的帖子

在define_method中使用局部变量

我想了解如何define_method工作以及如何正确使用定义块之外的变量.这是我的代码:

class Test
  def self.plugin
    for i in 1..2
      define_method("test#{i}".to_sym) do
        p i
      end
    end
  end
  plugin
end

ob = Test.new
ob.test1 #=> 2  (I would expect 1)
ob.test2 #=> 2  (I would expect 2)
Run Code Online (Sandbox Code Playgroud)

看来,在这些方法test1test2,的值i定义期间未取代的,但被直接计算当场当方法被调用.所以,我们只看到的最新值i,这是2.但Ruby从哪里获取此值?还有办法让test#{i}印刷品i

在这种特殊情况下,我可以使用解决方法__method__,但可能有更好的解决方案.

ruby metaprogramming

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

在plpgsql中声明多个相同类型的变量有什么捷径吗?

目前我以这种方式声明所有变量:

declare
  x int;
  y int;
  z int;
begin
  ...
end
Run Code Online (Sandbox Code Playgroud)

是否可以在一行中声明x,yz(具有相同类型),例如:

declare
  x, y, z int;
begin
  ...
end
Run Code Online (Sandbox Code Playgroud)

到目前为止,我还没有在文档中找到任何提示......

postgresql types plpgsql variable-declaration

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

postgres `order by` 参数类型

order byPostgresql 中子句的参数类型是什么?

我遇到了一个非常奇怪的行为(使用 Postgresql 9.5)。即,查询

select * from unnest(array[1,4,3,2]) as x order by 1;
Run Code Online (Sandbox Code Playgroud)

1,2,3,4按预期生产。然而查询

select * from unnest(array[1,4,3,2]) as x order by 1::int;
Run Code Online (Sandbox Code Playgroud)

产生1,4,3,2,这看起来很奇怪。同样,每当我1::int用任何函数(例如greatest(0,1))甚至case运算符替换时,结果都是无序的(与我所期望的相反)。

那么参数应该具有哪种类型order by,以及如何获得预期的行为?

postgresql sql-order-by

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