tkinter在安装Python 3.4.2版本后,我遇到了导入问题pyenv.我的系统Python是2.7.6版.我正在使用Ubuntu 14.04.对于以下示例脚本t.py:
import _tkinter
print ("Hello")
Run Code Online (Sandbox Code Playgroud)
我明白了:
$ pyenv global system
$ python --version
Python 2.7.6
$ python t.py
Hello
$ pyenv global 3.4.2
$ python --version
Python 3.4.2
$ python t.py
Traceback (most recent call last):
File "t.py", line 3, in <module>
import _tkinter
ImportError: No module named '_tkinter'
Traceback (most recent call last):
File "t.py", line 3, in <module>
import _tkinter
ImportError: No module named '_tkinter'
Run Code Online (Sandbox Code Playgroud)
请注意pyenv安装的Python 3.4.2版本~/.pyenv/versions/3.4.2/.
根据perlre,以下代码应该花几秒钟执行:
$ time perl -E '$_="((()" . ("a") x 18; say "ok" if m{ \(([^()]+|\( [^()]* \))+\)}x;'
real 0m0.006s
user 0m0.000s
sys 0m0.005s
Run Code Online (Sandbox Code Playgroud)
文件说:
考虑上面的模式如何
((()aaaaaaaaaaaaaaaaaa在几秒钟内检测到不匹配 ,但这次额外的字母加倍.
如图所示,我的笔记本电脑只需要一秒钟的时间.即使在一百万秒的时间内运行也会a在半秒内完成:
$ time perl -E '$_="((()" . ("a") x 1000000; say "ok" if m{ \(([^()]+|\( [^()]* \))+\)}x;'
real 0m0.454s
user 0m0.446s
sys 0m0.008s
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
最近,我尝试了一些语法来修改文件的小部分.在那些测试用例中,我会保留大部分文件,只是在这里和那里修改小块,请参阅 此评论问题的示例.
所以我需要一个(或几个)动作方法(即语法的动作类中的方法),我将使用其make方法将文件的修改部分附加到匹配对象.问题是语法本身会有更多令牌/规则/正则表达式与复杂的嵌套.因此,需要将(通过连续调用make())小变化(当前附加到令牌的匹配对象)传播
到TOP()动作类中的方法,使得文件中的所有其他(所有其他标记/规则/正则表达式)都是语法.parse()呼叫返回的结果保持不变.
因此,除了一个之外,action类中的所有方法都采用完全相同的形式:
method make-data ($match-data) {
$match-data.make( [~] $match-data.chunks.map: {$_.value.?made // $_.value} );
}
Run Code Online (Sandbox Code Playgroud)
现在,对于所有动作方法,显式重复相同的代码在我看来非常冗长,并且还打破了DRY编程原则.
有没有办法告诉语法类,如果没有指定一个动作方法(对应于语法中的一个标记),它将默认为make-data上面的方法(或类似的方法)?
所以在这种情况下,我设想了DEFAULT()动作类中的一个方法:
method DEFAULT ($match-data) {
$match-data.make( [~] $match-data.chunks.map: {$_.value.?made // $_.value} );
}
Run Code Online (Sandbox Code Playgroud)
如果语法类中的标记在动作类中没有相应的方法,则调用该方法.
我正在进行排序,并希望控制alpha值的cmp不区分大小写(即https://perl6.org/archive/rfc/143.html).
是否有一些:我也许是这个副词?
我需要使用Perl 6从字符串中删除变音符号.我尝试这样做:
my $hum = '????';
$ahm.subst(/<-[\c[HEBREW LETTER ALEF] .. \c[HEBREW LETTER TAV]]>/, '', :g);
Run Code Online (Sandbox Code Playgroud)
我想删除所有不在HEBREW LETTER ALEF(א)和HEBREW LETTER TAV(ת)之间的字符.我希望以下代码返回"חום",但它会返回"חם".
我想会发生的事情是,默认情况下Perl 6由字形工作,认为是一个字素,并删除所有字符.通过字形工作通常是明智的,但在我的情况下,我需要通过代码点来工作.
我试图找到一个能让它通过codepoint工作但却找不到它的副词.也许在Perl 6中还有一种方法可以使用Unicode属性来排除变音符号,或仅包含字母,但我也找不到.
谢谢!
nqp::if(
nqp::istype(nqp::atpos($task,3),$!Block),
QAST::Op.new( :op<call>,
QAST::WVal.new(:value(nqp::atpos($task,3))),
$self,
$getattr
),
nqp::if(
nqp::iseq_i($code,5),
QAST::IVal.new(:value(nqp::atpos($task,3))),
QAST::NVal.new(:value(nqp::atpos($task,3)))
)
),
Run Code Online (Sandbox Code Playgroud)
if $invocant_type =:= $!acc_sig_cache_type {
$sig := $!acc_sig_cache;
}
# First time, create new signature and mark it cached
else {
$sig := $!w.create_signature_and_params(
NQPMu, %sig_empty, $block, 'Any', :method, :$invocant_type);
$!acc_sig_cache := $sig;
$!acc_sig_cache_type := $invocant_type;
}
Run Code Online (Sandbox Code Playgroud)
我以为前面的最后一种形式if(不带nqp::)是不允许的,除非if内置了?请参阅NQP内置订阅者列表。
第一种形式,nqp::if在NQP操作码列表中进行了描述,但是我找不到第二种形式的文档,尽管它似乎是Rakudo源代码树中最常见的形式。
为什么if在NQP 中有两种形式的陈述?
I am going to use Hash::Merge as an example. Consider:
use v6;
use Hash::Merge; # <-- imports all symbols marked with "is export" from Hash::Merge
my %hash1 = a1 => [1, 2, 3], b => "xxx", c => { ca => 1 }, e => 5;
my %hash2 = a1 => [1, 5, 3], b => "yyyy", c => { ca => 5, f => "a" }, d => 4;
my %res = merge-hash(%hash1, %hash2, :no-append-array);
Run Code Online (Sandbox Code Playgroud)
Suppose I do not …
我正在通过以下设置使用语法::追踪器:
第6页
use v6;
use lib '.';
use MyGrammar;
my $res = MyGrammar.parse('hello 6 9 bye');
say $res;
Run Code Online (Sandbox Code Playgroud)
MyGrammar.pm6:
unit grammar MyGrammar;
use Grammar::Tracer;
rule TOP { [<number> || <word> ]* }
rule number { \d+ }
rule word { \w+}
Run Code Online (Sandbox Code Playgroud)
但是未启用跟踪。我猜这是因为语法MyGrammar不在use Grammar::Tracer语句的词法范围内吗?
我正在尝试为Cgraph创建Perl6绑定,并且其中一个结构为其某些属性设置了位字段,其值小于8。如何在模块中表示该字段?
我尝试使用is nativesize(x)特征定义自定义类型,但是CStructs仅支持8位宽倍数的类型。
C示例代码:
struct Agtag_s {
unsigned objtype:2;
}
Run Code Online (Sandbox Code Playgroud)
我试过的
my native objtype is repr('P6int') is Int is nativesize(2) is export { }
class Agtag is repr('CStruct') is export {
has objtype $.object-type;
}
Run Code Online (Sandbox Code Playgroud)
尝试将我的模块与该代码一起使用会失败,并显示以下错误消息:
CStruct only supports native types that are a multiple of 8 bits wide (was passed: 2)
我试图学习更多有关如何检测Perl中的内存泄漏的信息。我有这个程序:
p.pl:
#! /usr/bin/env perl
use Devel::LeakTrace;
my $foo;
$foo = \$foo;
Run Code Online (Sandbox Code Playgroud)
输出:
leaked SV(0xac2df8e0) from ./p.pl line 5
leaked SV(0xac2df288) from ./p.pl line 5
Run Code Online (Sandbox Code Playgroud)
为什么这会泄漏两个标量(而不仅仅是一个)?
然后我将其贯穿valgrind。首先,我创建了的调试版本perl:
$ perlbrew install perl-5.30.0 --as=5.30.0-D3L -DDEBUGGING \
-Doptimize=-g3 -Accflags="-DDEBUG_LEAKING_SCALARS"
$ perlbrew use 5.30.0-D3L
$ cpanm Devel::LeakTrace
Run Code Online (Sandbox Code Playgroud)
然后我按照建议运行valgrind设置:PERL_DESTRUCT_LEVEL=2perlhacktips
$ PERL_DESTRUCT_LEVEL=2 valgrind --leak-check=yes perl p.pl
==12479== Memcheck, a memory error detector
==12479== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==12479== Using …Run Code Online (Sandbox Code Playgroud) perl6 ×7
raku ×7
grammar ×2
perl ×2
regex ×2
backtracking ×1
nativecall ×1
nqp ×1
python ×1
unicode ×1