我正在为Linux构建一个状态栏。我已经制作了一个模块,用于插入不同的键盘时:
set initialTeck [eval exec cat [glob /sys/bus/usb/devices/*/product]]
set initialTeck [string match *Truly* $initialTeck]
set initialKB [exec xkb-switch]
dict set table samy 0 samy
dict set table samy 1 temy
dict set table temy 0 samy
dict set table temy 1 temy
dict set table gb 0 samy
dict set table gb 1 temy
proc init {} {
variable initialTeck
variable initialKB
set currentTeck [eval exec cat [glob /sys/bus/usb/devices/*/product]]
set currentTeck [string match *Truly* $currentTeck]
set currentKB [exec xkb-switch]
if {$initialTeck != $currentTeck} {
set initialTeck $currentTeck
nextKB $currentKB $initialTeck
}
}
proc nextKB { currentKB teck } {
variable table
exec [dict get $table $currentKB $teck]
}
while 1 {
init
after 1000
}
Temy是一个.xkb布局文件,是我为“真正符合人体工程学的键盘”设计的,samy是一个标准GB键盘的自定义.xkb布局。Teck存储USB端口的状态和哈希表的dict
。你知道吗
很明显,状态栏还有更多的模块,我已经使用了名称空间,但是随着项目越来越大,我决定采用面向对象的方法。同时,我需要将项目翻译成Python代码,以便在开发人员之间共享。你知道吗
目前tcl有许多面向对象的扩展;TclOO、Snit、Stooop、Incr tcl、Xotcl等等。因此,如果TCR TCL类似于C++,那么是否存在类似于Python的TCL扩展?你知道吗
没有一个Tcl OO系统在风格上与Python完全相似;语言不同,支持不同的思考问题的方式。部分原因是语法(大多数Tcl程序员不太喜欢
_
字符)但其中更重要的一点是,Tcl OO系统的工作方式不同:最终的结果是,Tcl的OO系统都使对象的行为类似于Tcl命令(当然,这允许很大的灵活性),而不像Tcl值(通常是非常简单的透明数字、字符串、列表和字典)。这使得OO的风格与Python截然不同。你知道吗
你可以假装在最简单的水平,我想,但一旦你开始做任何复杂的事情,你会击中差异。更重要的是,我们需要选择一个更具体的例子来深入研究。你知道吗
以下是一些Python code:
下面是TclOO中的等价类定义(我最喜欢):
除了明显的语法差异(例如,Tcl喜欢大括号并将表达式放在
expr
命令中),需要注意的主要事情是变量应该在类定义中声明,并且不需要传递self
(它自动作为命令[self]
呈现)。你知道吗相关问题 更多 >
编程相关推荐