我认为动态数组是D中向量的替代,但似乎它们没有删除函数(只有关联数组才有),这对于向量来说是一个限制,所以我想知道我是否已经做到了.如果有一个如下的数组,
uint[] a;
a.length = 3;
a[0] = 1;
a[1] = 2;
a[2] = 3;
Run Code Online (Sandbox Code Playgroud)
然后,我发现删除第二个元素的唯一方法是,
a = a[0..1] ~ a[2];
Run Code Online (Sandbox Code Playgroud)
但这似乎并不正确(但也许只是因为我还没有理解这一点).那么有一个向量,还有另一种从动态数组中删除元素的方法吗?
谢谢.
我想为我自己的小语言实现一个类类型,但我起初想的不会太难让我难过.我有解析器,这是我遇到问题的代码生成方面.任何人都可以对最佳/正确的方法有所了解吗?具体来说,我想在LLVM中这样做,所以当我需要知道这个任何特定LLVM代码的一般性时,我应该使用它会很棒.
谢谢T.
注意:我对LLVM的体验基本上来自于Kaleidoscope教程,而且还有一些额外的内容,但我还远远没有完全理解LLVM API.
我正在用一系列引号构建一个页面.每个报价的形式如下:
<blockquote>
<span class="ldquo">“</span>The quote<span class="rdquo">”</span>
<cite>The author</cite>
</blockquote>
Run Code Online (Sandbox Code Playgroud)
引号应该被左上方的大引号(ldquo绝对定位)和右下角的大引号(rdquo浮动然后相对定位)阻挡.引号中的文本为text-indent-ed,以使左上角的引号不与文本重叠.在Firefox(3.6)和Chromium(8)中,这很好用,但在IE(8)中,当我更改字体大小时ldquo,似乎文本缩进从大小上升,它将基于字体大小容器的大小ldquo(容器中的第一个元素).
我发现,如果我<span />之前添加一个空ldquo并更新其左偏移以匹配容器字体大小的文本缩进它在IE中工作但是这在Firefox和Chromium中断,它们期望左偏移为ldquo' s字体大小.并不是说作为"修复"无论如何都会特别令人高兴.
一些重新创建问题的代码如下:
<!DOCTYPE html>
<html>
<head>
<style>
#container {
width: 20em;
}
blockquote {
margin :0 0 2em 0;
position:relative;
text-indent: 2em;
font-size:0.7em;
text-align:justify;
}
.ldquo, .rdquo {
color: #EC008C;
font-size:3em;
height:0;
top: -0.15em;
}
.ldquo {
position:absolute;
left: -0.6em;
}
.rdquo {
float:right;
position:relative;
left: 0.05em;
}
blockquote cite {
display:block; …Run Code Online (Sandbox Code Playgroud) 好吧,因为目前没有答案,我不觉得这样做太糟糕了.虽然我仍然对幕后实际发生的问题感兴趣,但我最迫切的问题是更新2中指定的问题.
a JoinableQueue和a 之间有什么区别Manager().Queue()(什么时候应该使用另一个?).更重要的是,在这个例子中,替换另一个是否安全?
在下面的代码中,我有一个简单的进程池.每个进程都传递进程queue(pq)以从中提取要处理的数据,并返回值queue(rq)以将返回的处理值传递回主线程.如果我不附加到返回值队列,它会起作用,但是一旦我这样做,由于某种原因阻止进程停止.在这两种情况下,进程run方法都返回,因此它不在put返回队列阻塞上,但在第二种情况下进程本身不会终止,因此程序join在进程时死锁.为什么会这样?
更新:
它似乎与队列中的项目数有关.
至少在我的机器上,我可以在队列中拥有多达6570个项目,它实际上可以工作,但不仅仅是这个而且它会死锁.
它似乎合作Manager().Queue().
无论是限制JoinableQueue还是仅仅误解了两个对象之间的差异,我发现如果我用a替换返回队列Manager().Queue(),它会按预期工作.它们之间有什么区别,什么时候应该使用另一个?
如果我从rq
Oop 消费,则不会发生错误.这里有一个答案,当我评论它时,它就消失了.无论如何,它所说的一件事就是质疑,如果我添加一个消费者,这个错误是否仍会发生.我试过这个,答案是,不,不是.
它提到的另一件事是来自多处理文档的引用作为问题的可能关键.提到JoinableQueue的,它说:
...用于计算未完成任务数量的信号量最终可能会溢出引发异常.
import multiprocessing
class _ProcSTOP:
pass
class Proc(multiprocessing.Process):
def __init__(self, pq, rq):
self._pq = pq
self._rq = rq
super().__init__()
print('++', self.name)
def run(self):
dat = self._pq.get()
while not dat is _ProcSTOP:
# self._rq.put(dat) # uncomment me for deadlock
self._pq.task_done()
dat = …Run Code Online (Sandbox Code Playgroud) 我已经和D玩了几天,并且对它感到非常兴奋,直到,我试图让gtkd工作.我现在浪费了3天中最好的部分试图获得一个工作设置,并开始得到(阅读;很久以前得到)有点士气低落.我想知道在我放弃之前是否有人可以提供帮助.我在网上找到的很多信息已经过时,所以我不确定我是否认为这甚至是可能的.
剩下的就是我到目前为止所尝试的内容,如果您有快速解决方案,可能不需要阅读它,所以请随意跳转到... [跳转到此处]
所以,首先我需要知道,探戈实际上可以与D2.0一起使用,我相信它不是最初的,但现在D2.x是这样的,你可以使用探戈和恐惧症并排.如果这不是真的,那么我想我已经陷入了第一道障碍,这是一个非首发.
到目前为止我采取的步骤.
这个设置会编译D,但是当我来安装gtkd(带有dsss)时,它编译但是在尝试使用它编译任何东西时我得到了各种错误(与tango有关).好吧,正如我所提到的,我没有libs,所以这不应该是意料之外的.我试图手动安装探戈库但仍然有很多错误,并最终使用了一个dsss net install tango警告我,我不能回到phobos(一些困扰我的东西,就像我提到的那样,我认为这两个可以和对方一起使用)无论如何,我继续前进并完全搞砸了我的设置.我现在无法编译任何D.
对不起我无法更明确地说明我在上一节中遇到的错误,老实说我不记得了.
无论如何,我删除了我安装的所有内容.并重新开始.
我现在读到最新的探戈不适用于gdc(不确定这是否属实)所以我
现在我无法识别dmd,因此只能使用gdc.然而,这并没有找到探戈.如果我直接使用dmd,它会找到tango和gtkd,但是我发现有关volatile语句被弃用的错误.在D2.x中显然是正确的东西,它让我回到"甚至支持探戈".
天哪,我很困惑!
[跳到这里]
如果有人能给我一步一步的说明如何设置工作设置,我将永远感激不尽!
谢谢,T.
更新: "我们在那里!"
所以我从http://www.digitalmars.com/d/download.html下载了dmd.2.049.zip 并解压缩到我的主目录并做了一个export PATH = $PATH:~/dmd2/linux/bin(感谢dsimcha).
忘了dsss.根据http://www.dsource.org/projects/gtkd/wiki/UsingSubversion上的说明获得了gtkd的svn版本.编辑GNUmakefile更改前缀/home/me/dmd2/linux并执行了make install.
编辑~/dmd2/linux/bin/dmd.conf所以包含的路径../include(放入gtkD库,../lib所以我不需要编辑库路径).
现在最后用gtkD编译我需要链接libgtkd和libdl,这是由dmd mydprog.d -L-lgtkd -L-ldl(由于jpf)完成的.
我想'..'在ANTLR3词法分析器中创建一个令牌,用于将表达式串起来
a..b // [1]
c .. x // [2]
1..2 // [3]
3 .. 4 // [4]
Run Code Online (Sandbox Code Playgroud)
所以,我补充说,
DOTDOTSEP : '..'
;
Run Code Online (Sandbox Code Playgroud)
问题是我已经有了一条规则:
FLOAT : INT (('.' INT (('e'|'E') INT)? 'f'?) | (('e'|'E') INT)? ('f'))
;
Run Code Online (Sandbox Code Playgroud)
并且在上面的示例[3] 1..2中得到匹配FLOAT(我不知道为什么因为第一个.是另一个.不是INT,但它是).
我想知道是否有办法改变词法分析器规则的优先级,因此DOTDOTSEP首先匹配FLOAT.
看这里,似乎我失去了出来,"The rule having the greatest count is the winner.",但不知道是否有办法解决它.
PS INT定义如下......
fragment DIGIT
: '0'..'9'
;
INT : DIGIT+
;
Run Code Online (Sandbox Code Playgroud)
编辑.
进一步的测试让我觉得它不像直接匹配FLOAT规则那么简单.(我打算改变这个问题,但既然我现在得到了答案,我就不会.)问题(我相信)仍然存在于词法分析规则的优先级,所以问题仍然是一样的.
我正在编写一些PHP,它需要一些路径到不同的内容目录,并使用它们以后包含页面的各个部分.我正在努力确保路径看起来像它们一样,并且它们都没有违反应用程序的规则.哪个是,
PRIVATEDIR(相对于DOCUMENT_ROOT)定义必须高于DOCUMENT_ROOT.CONTENTDIR(相对于PRIVATEDIR)定义必须位于下方PRIVATEDIR,不得返回DOCUMENT_ROOT.*DIRS的(相对于CONTENTDIR)定义必须位于下方CONTENTDIR我在单例控制器类中设置了一些默认值,然后用户将要覆盖的路径数组传递给此类构造函数.然后我想要理智地检查它们以确保它们遵守上述规则.继承人我是如何开始的...
编辑: 请注意我error_reporting在下面的代码中的使用,然后不要自己做!我误解了这个命令是如何工作的.如果你想知道为什么,请参阅stealthyninja和评论Shrapnel的评论(并感谢他们指出这一点).
private $opts = array( // defaults
'PRIVATEDIR' => '..', // relative to document root
'CONTENTDIR' => 'content', // relative to private dir
...
...
);
private function __construct($options) { //$options is the user defined options
error_reporting(0);
if(is_array($options)) {
$this->opts = array_merge($this->opts, $options);
}
if($this->opts['STATUS']==='debug') {
error_reporting(E_ALL | E_NOTICE | E_STRICT);
}
$this->opts['PUBLICDIR'] = realpath($_SERVER['DOCUMENT_ROOT']) …Run Code Online (Sandbox Code Playgroud) 我有一种情况,脚本从用户接收一些数据,然后返回一个哈希.在一段时间内,比如说X秒,哈希是有效的,并且当与原始数据一起提供回脚本时,并且在指定的时间范围内,允许访问某些功能.
我这样做是通过在哈希中包含一个时间戳.我可以通过调用say来获取时间戳,floor(time()/X);但是这样,而不是在X秒后过期,在1到X秒之间到期.我通过保存time()%X并将其附加到哈希来解决这个问题,然后当我收到它,解析它并从中减去它时time(),所以我的哈希函数看起来有点像这样:
function hash($oldhash='') {
static $hash;
if(!$hash) {
$time = time();
$expoff = explode('!', $oldhash, 2);
$expoff = $expoff[0] ? $expoff[0] : $time%$this->_cfg['hashexpire'];
$hash = $expoff.'!'.sha1($this->_data.floor(($time-$expoff)/$this->_cfg['hashexpire']));
}
return $hash;
}
Run Code Online (Sandbox Code Playgroud)
还有盐在那里,但为了清楚起见我删除了它.
这是有效的,但我认为可能有更好的方法来实现我在这之后的想法,并想知道你是否有任何建议.
在下面的代码dd_belatedpng.js中加载尽管我使用的是Firefox 4.0.1.根据yepnope.js文档,ielt7!如果浏览器的IE低于版本7 ,前缀应该只导致脚本加载.这个功能是从Modernizr.load实现中删除的(我相信一个只是另一个的别名)或者是一个错误,或者,正如我怀疑的那样,我只是错过/误解了一些明显的东西?谢谢你的帮助.这是代码.
Modernizr.load([
{
load: '//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js',
complete: function() {
if(!window.jQuery) {
Modernizr.load('/inc/jquery-1.6.1.min.js');
}
}
},
{
load : 'ielt7!/inc/dd_belatedpng.js',
callback: function() {
$(function() {
DD_belatedPNG.fix("img, .png_bg");
});
}
}/*,
'jquery.plugins.js',
'my.scripts.js'*/
]);
Run Code Online (Sandbox Code Playgroud) 我正在 cython 中编写一些代码,并且我有一些"Packages \xe2\x80\x9cwithin\xe2\x80\x9d module"。—这实际上是我的问题的后续,结构应该是相同的。问题是这是 cython,所以我正在处理的.so是而不是.py。
工作达到__init__.so这样的程度,
import mystuff\nRun Code Online (Sandbox Code Playgroud)\n\n会起作用,但它似乎掩盖了下面的所有子包。那是,
\n\nimport mystuff.test.test1\nRun Code Online (Sandbox Code Playgroud)\n\n将不会。我收到一个ImportError: No module named ...错误。
我该如何解决这个问题?.pyx在编译之前我需要添加一些东西吗.c?或者也许我可以重命名__init__.so为其他名称,并以某种方式将其拉入__init__.py(注意,__init__.py仍然需要与 一起存在.so以显示它的包)?或者是其他东西。
更新:未为包__path__定义属性....so
好吧,我想到也许我可以通过操纵__path__包的属性来解决这个问题。有趣的是,这是为.py包定义的,但会导致.so\ 错误。这不是解决方案,但我想知道这是否是问题的根源。