我正在编写一个从c调用ruby代码的应用程序.我有点困难,想知道是否有人能指出我的仪式方向.
我目前在我的C.
#include ruby.h
main()
{
ruby_init();
rb_require("myRubyFile");
rb_funcall(rb_module_new(), rb_intern("RubyFunction"), 0, NULL);
}
Run Code Online (Sandbox Code Playgroud)
我的ruby文件与我的c文件位于同一目录中,名为myRubyFile.rb,包含函数RubyFunction()的定义.
这是我实际想要做的事情的减少,只是让其他人更具可读性.我只是需要一些反馈来判断这是否是从我的c文件中调用ruby代码的正确方法.
问候
伙计们我要求列出上个月的所有日期,如下所示
20101201
20101202
20101203
20101204
20101205
..
..
..
..
..
..
..
..
20101231
Run Code Online (Sandbox Code Playgroud)
如果有任何比这个查询更好的方法,请告诉我.
select TO_CHAR(TRUNC(SYSDATE,'MM')-1,'YYYYMMDD')-(level-1) as
EACH_DATE from dual A connect by level
< (TO_NUMBER(TO_CHAR(TRUNC(SYSDATE,'MM')-1,'DD'))+1)
Run Code Online (Sandbox Code Playgroud)
另请告诉我这个查询的问题,它说"缺少右括号"
SELECT /*+ PARALLEL (A,8) */ /*+ DRIVING_STATE */
TO_CHAR(TRUNC(TRUNC(SYSDATE,'MM')-1,'MM'),'MONYYYY') "MONTH", TYPE AS "TRAFF", COLUMN, A_COUN AS "A_COUNT",COST FROM DATA_P B WHERE EXISTS
(
select TO_NUMBER(TO_CHAR(TRUNC(SYSDATE,'MM')-1,'YYYYMMDD')-(level-1)) EACH_DATE
from dual A connect by level < TO_NUMBER(TO_CHAR(TRUNC(SYSDATE,'MM')-1,'DD')+1)
WHERE A.EACH_DATE = B.DATE order by EACH_DATE ASC
)
Run Code Online (Sandbox Code Playgroud)
强调文字
我可以超过perl的范围迭代界限,有或没有-Mbigint:
$» perl -E 'say $^V; say for (0..shift)' 1e19
v5.16.2
Range iterator outside integer range at -e line 1.
Run Code Online (Sandbox Code Playgroud)
我怎样才能确定这个上限,而不是直到我超过它?
在下面的片段中,如何区分sub的第二个调用实例和foo第一个?
while ($whatever) {
foo(); foo(); # foo() and foo() have the same caller package, file, and line
}
Run Code Online (Sandbox Code Playgroud)
caller()返回文件,行和列的超级东西就可以了.我不想使用源过滤器.
背景,或者,这不是一个XY问题吗?
我有一个便利模块,Local :: Thread :: Once,它以OO-ish方式公开像pthread_once/ 一样的功能std::call_once,也作为子程序属性.这些都很容易,因为在任何一种情况下都有一个自然而明确的"once_control"或"once_flag".
但是,还有一个过程接口 - once { ... }当前基于$filename和$line返回的序列化caller.像这样的东西:
sub once(&) {
my $user_routine = shift;
my (undef, $file, $line) = caller;
my $once_control = get_a_shared_flag_just_for_this_invocation($file, $line);
lock($once_control);
if (! $once_control) { $once_control++; $user_routine->(); }
return; …Run Code Online (Sandbox Code Playgroud) 以下代码在从终端运行时表现如预期:
perl -e 'kill -2, $$; warn HERE, $/'
Run Code Online (Sandbox Code Playgroud)
它在发送SIGINT到"HERE"之前发送并死亡:
~# perl -e 'kill -2, $$; warn HERE, $/'
~# echo $?
130
~#
Run Code Online (Sandbox Code Playgroud)
问题:从shell脚本运行时,相同的代码无法终止自身PID :
~# cat 1.sh
perl -e 'kill -2, $$; warn HERE, $/'
~#
~# sh 1.sh
HERE
~#
~# echo $?
0
~#
Run Code Online (Sandbox Code Playgroud)
另一方面,用killshell 替换perl的工作正常:
~# cat 2.sh
perl -e 'qx/kill -2 $$/; warn HERE, $/'
~#
~# sh 2.sh
~#
~# echo $?
130 …Run Code Online (Sandbox Code Playgroud) 我的理解是,与Interbase v6一致,Firebird 2.5不支持SQL-92 INTERVAL关键字.至少,所以建议这个引用和我重复的SQLCODE -104错误试图INTERVAL在Firebird的isql(1)下运行.
那么,我如何解释我们的民事清算时间的不规则性 - 月份不是一成不变的,也不是节省时间和飞跃调整的日子,更不用说混乱的年份等等 - 执行TIMESTAMP算术时在Firebird 2.1下?
我怎样才能轻易地确定"一个月前"或"一周后"而不是给定TIMESTAMP?"一天后"或"两小时前"怎么样?
我需要一些mysql查询的帮助.我有从2011年1月1日到2011年4月30日的数据的数据库表.应该有每个日期的记录.我需要找出表中是否缺少任何日期.
例如,假设2011年2月2日没有数据.我如何找到该日期?
我将日期存储在名为reportdatetime的列中.日期存储格式为:2011-05-10 0:00:00,即2011年5月5日上午12:00:00.
有什么建议?
我发现perl很容易做以下事情:
print "File not found, valid files are:\n\n".`ls DIRECTORY | grep 'php'`;
`rm -rf directory`
my @files_list = split("\n", `ls DIRECTORY | grep 'FILE_NAME_REGEX'`)
Run Code Online (Sandbox Code Playgroud)
做这些事情是不好的做法吗?我觉得这样做要比煞费苦心地实施每件事情要容易得多.我将Perl视为bash的高级版本.
有没有办法将 ruby 包(特别是 rubygem)标记或版本化为开发人员或测试版?
在 Perl 世界中,有一个广受尊重的约定,即用下划线分隔的小数字表示开发人员版本。也就是说,1.23_01 是普通版本 1.23 之后的开发版本,主要的 Perl 打包软件和社区分发站点都知道这一点。ruby 是否有类似的做法?
我有两个约会。从其他应用程序的表格中检索的格式为 YYYYMMDD,第二个日期是当地时间,我需要这两个日期之间的天/月/年。
我试过这个
my $t = Time::Piece->strptime($expi, "%Y %m %d"); #First date
my $today = Time::Piece->new; #Localtime
my $diff = $t - $today;
print $diff;
Run Code Online (Sandbox Code Playgroud)
但这给了我一些乱码。
变量 $t = 12 月 31 日星期五 00:00:00 9999
变量 $today = 2020 年 2 月 19 日星期三 14:40:55
输出:251820094888
有任何想法吗?提前致谢。