当我尝试在tcl中运行此命令时:
tar -zcvf input.scs__pmos.sdevv.tar.gz input.scs*
Run Code Online (Sandbox Code Playgroud)
我收到这条消息:
/bin/tar: input.scs*: Cannot stat: No such file or directory
/bin/tar: Error exit delayed from previous errors
child process exited abnormally
while executing
Run Code Online (Sandbox Code Playgroud)
但是,当我在Perl/shell中运行时,我得到:
perl -e 'system("tar -zcvf input.scs__pmos.sdevv.tar.gz input.scs*")'
Run Code Online (Sandbox Code Playgroud)
我明白了:
input.scs
input.scs~
Run Code Online (Sandbox Code Playgroud)
为什么Tcl造成这种情况?从LINUX Shell运行产生相同的结果.我使用Tcl 8.5
在Tcl中,如果您有一个包含偶数元素的列表,则可以一次循环两个元素.看到这段代码:
foreach { a b } [ list 1 2 3 4 ] {
puts "${a} ${b}"
}
Run Code Online (Sandbox Code Playgroud)
将输出:
1 2
3 4
Run Code Online (Sandbox Code Playgroud)
如何用Ruby获得相同的行为?
在其他动态类型,交错语言(Ruby,PERL ...)中,可以将哈希中的键定义为函数调用的内联.例如(在Ruby中:
a[ foo(1) ] = bar
Run Code Online (Sandbox Code Playgroud)
我试图在Tcl 8.4中做同样的事情,但失败了,请参阅下面的tclsh日志:
% proc add1 { x } { expr {$x + 1 } }
% array set p {}
% set p( [add1 1]) 0
wrong # args: should be "set varName ?newValue?"
Run Code Online (Sandbox Code Playgroud)
不用说,我将一个变量分配给add1 1的输出,并使用变量值,它确实有效:
% set a [add1 1]
2
% set p($a) 0
0
Run Code Online (Sandbox Code Playgroud)
毫无疑问,这是一个风格问题,但我喜欢内联函数,而不是使用中间变量.有什么建议?
看到这个简单的正则表达式代码:
puts [ regexp -inline {^\-\-\S+?=\S+} "--tox=9.0" ]
Run Code Online (Sandbox Code Playgroud)
输出是:
>--tox=9
Run Code Online (Sandbox Code Playgroud)
似乎第二个\ S +非贪婪!只有1个字符匹配
在PERL中,可以看到结果如我所料,见1行输出:
perl -e '"--tox=9.0" =~/(^\-\-\S+?=\S+)/ ; print "${1}\n"'
--tox=9.0
Run Code Online (Sandbox Code Playgroud)
如何在Tcl中获取Perl行为?
假设我有一个文件,命名为./ko
我想要它的完整路径,可以(例如)/foo/bar/ko
在Perl中,只有一个
File::Spec->rel2abs("./ko")
Run Code Online (Sandbox Code Playgroud)
在Ruby中,它是:
File.expand_path("./ko")
Run Code Online (Sandbox Code Playgroud)
怎么在Tcl中完成?
我正在使用 EDA 软件。它要求我依赖全局变量。假设我有一个进程,我正在寻找一个全局变量 CCK_FOO。我有2个选择:
global CCK_FOO在代码中使用。::CCK_FOO就“管理水平”而言,这些看起来是相同的。这两种方法是否有“幕后”的优点和缺点?我实际上更喜欢使用::,因为它可以最大限度地减少意外覆盖的可能性。
Ruby Hash的两种方法之间有什么区别,还是只有"有多种方法可以做到"?
我看不出两者之间有任何可衡量的差异.
谢谢,
有人告诉我,在lisp中,在制作变量作用域时,let速度比prog(但prog有更多的灵活性)要快.我的问题是:为什么?我的意思是,有一些时候使用prog更容易,但是,除了经验测试,我不知道如何猜测效果.是在分配内存时?是执行吗?循环时它会变得更多吗?我不知道实现差异的具体细节.
我过去一直在使用Python,把它放在一边,现在我很高兴回来.我试图访问列表中的前两个元素,但我不断得到第一个元素,而不是第二个元素.
以下是来自Python shell.看来,当我使用的[i:j]时候j=i+1,我只是第一个元素.这是正确的行为吗?
>>> p=['ho','he','hoo']
>>> p
['ho', 'he', 'hoo']
>>> p[0:1]
['ho']
>>> p[1:0]
[]
>>> p[0:1]
['ho']
>>> p[1]
'he'
>>> p[0:3]
['ho', 'he', 'hoo']
>>> p[0:2]
['ho', 'he']
>>> p[0:3]
['ho', 'he', 'hoo']
>>> p[1:2]
['he']
Run Code Online (Sandbox Code Playgroud)
我使用的Python版本是:
Python 3.2(r32:88445,2011年2月21日,21:11:06)[GCC 4.6.0 20110212(Red Hat 4.6.0-0.7)]在linux2上
Linux是Centos,内核是
Linux Fedora 2.6.41.4-1.fc15.x86_64#1
在Linux中,只需输入以下内容即可“简单”地将可执行文件添加到文件中:
chmod +x <fname>
Run Code Online (Sandbox Code Playgroud)
但是,我在Ruby的宝石中找不到容易的东西。当然,可以进行系统调用,即
system( 'chmod +x' << fname )
Run Code Online (Sandbox Code Playgroud)
但是,我正在寻找更“优雅”的东西。
我正在使用Ruby 1.8.7。