我想了解如何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)
看来,在这些方法test1和test2,的值i定义期间未取代的,但被直接计算当场当方法被调用.所以,我们只看到的最新值i,这是2.但Ruby从哪里获取此值?还有办法让test#{i}印刷品i?
在这种特殊情况下,我可以使用解决方法__method__,但可能有更好的解决方案.
目前我以这种方式声明所有变量:
declare
x int;
y int;
z int;
begin
...
end
Run Code Online (Sandbox Code Playgroud)
是否可以在一行中声明x,y和z(具有相同类型),例如:
declare
x, y, z int;
begin
...
end
Run Code Online (Sandbox Code Playgroud)
到目前为止,我还没有在文档中找到任何提示......
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,以及如何获得预期的行为?