我有一个简单的pdf文件,其中包含"Hello world"字样,每个字体都有不同的颜色.
我正在加载PDF,如下所示:
PDFJS.getDocument('test.pdf').then( onPDF );
function onPDF( pdf )
{
pdf.getPage( 1 ).then( onPage );
}
function onPage( page )
{
page.getTextContent().then( onText );
}
function onText( text )
{
console.log( JSON.stringify( text ) );
}
Run Code Online (Sandbox Code Playgroud)
我得到一个像这样的JSON输出:
{
"items" : [{
"str" : "Hello ",
"dir" : "ltr",
"width" : 29.592,
"height" : 12,
"transform" : [12, 0, 0, 12, 56.8, 774.1],
"fontName" : "g_font_1"
}, {
"str" : "world",
"dir" : "ltr",
"width" : 27.983999999999998,
"height" : 12, …Run Code Online (Sandbox Code Playgroud) 为什么在Groovy中,当我创建2个列表时,如果我执行a.intersect(b)和b.intersect(a)会有区别:
def list1 = ["hello", "world", "world"];
def list2 = ["world", "world", "world"];
println( "Intersect list1 with list2: " + list1.intersect( list2 ) );
println( "Intersect list2 with list1: " + list2.intersect( list1) );
Run Code Online (Sandbox Code Playgroud)
痕迹:
Intersect list1 with list2: [world, world, world]
Intersect list2 with list1: [world, world]
Run Code Online (Sandbox Code Playgroud)
(你可以在这里复制:http://groovyconsole.appspot.com/如果你想测试它)
如果数组都包含唯一元素,那么它可以正常工作.一旦你开始添加重复项,它就会变得奇怪:
def list1 = ["hello", "world", "test", "test"];
def list2 = ["world", "world", "world", "test"];
println( "Intersect list1 with list2: " + list1.intersect( list2 ) );
println( …Run Code Online (Sandbox Code Playgroud) 我正在创建这样的地图:
def myMap = [:]
Run Code Online (Sandbox Code Playgroud)
映射基本上是键的对象和值的int.当我遍历地图时,我会减少该值,如果它为0,我将其删除.我已经尝试了myMap.remove(),但我得到了ConcurrentModificationError- 这是公平的.所以我继续使用it.remove(),这给了我奇怪的结果.
基本上,我的代码是这样的:
myMap.each {
it.value--;
if( it.value <= 0 )
it.remove();
}
Run Code Online (Sandbox Code Playgroud)
很简单.我的问题是,如果我myMap.size()在删除之前和之后打印,它们都是一样的.如果我打电话myMap.containsKey( key ),它给了我true,关键还在那里.
但是,如果我打印出这样的地图:
myMap.each { System.out.println( "$it.key: $it.value" ); }
Run Code Online (Sandbox Code Playgroud)
我什么都没得到,并且打电话myMap.keySet()然后myMap.values()回来.
有谁知道发生了什么?
我在Flash中创建了一个按钮,在里面我有一个TextField和一个MovieClip,两者都设置了实例名称.它们覆盖按钮的所有4个框架,没有关键帧.
我发现我无法使用我设置的实例名称访问对象,所以我使用这段代码来查看发生了什么:
var obj:DisplayObject = this.m_graphics.btnChange.upState;
for ( var i:int = 0; i < obj.numChildren; i++ )
{
trace( "We have an object at " + i + " - " + obj.getChildAt( i ) + ": " + obj.getChildAt( i ).name );
var t:TextField = obj.getChildAt( i ) as TextField;
if ( t == null )
continue;
trace( " The textfield has text '" + t.text + "' );
}
Run Code Online (Sandbox Code Playgroud)
我得到这个作为输出:
We have an object at 0 - [object …Run Code Online (Sandbox Code Playgroud) 我正在使用宏来简化返回本地化字符串,如下所示:
#define GetLocalStr(key, ...) \
[NSString stringWithFormat:[[NSBundle mainBundle] localizedStringForKey:key value:@"" table:nil], ##__VA_ARGS__]
Run Code Online (Sandbox Code Playgroud)
基本上,如果您在本地化字符串文件中有一个条目,如"name" = "My name is %@";调用
GetLocalStr( @"name", @"Foo" );
Run Code Online (Sandbox Code Playgroud)
将返回NSString @"My name is Foo"
然而,当我运行它时,如:
NSString * str = GetLocalStr( @"name", @"Foo" );
Run Code Online (Sandbox Code Playgroud)
我得到"格式字符串不是字符串文字"警告.即使遵循关于此警告的其他答案的建议并将其替换为:
NSString * str = [NSString stringWithFormat:@"%@", GetLocalStr( @"name", @"Foo" )];
Run Code Online (Sandbox Code Playgroud)
我仍然得到警告,此外,它有点打破宏观使生活更容易的点.
如何摆脱GetLocalStr#pragma suppressors中包含所有调用的警告?
编辑27/08
在通过CRD的答案并进行更多测试之后,似乎我对错误做了一个错误的假设.澄清:
本地化字符串文件:
"TestNoArgs" = "Hello world";
"TestArgs" = "Hello world %@";
Run Code Online (Sandbox Code Playgroud)
码:
NSString * str1 = GetLocalStr( @"TestNoArgs" ); // gives warning
NSString * str2 …Run Code Online (Sandbox Code Playgroud) 我使用TcpClient和为游戏创建了一个简单的持久套接字连接NetworkStream。连接,发送消息和正常断开连接都没有问题(退出应用程序/服务器关闭/等)。
但是,在某些情况下,客户端无法检测到与服务器的断开连接时,我遇到了一些问题。我要测试的最简单方法是拔出wifi盒上的网络电缆,或将手机设置为飞行模式,但这是在游戏中发生的,否则应该是稳定的wifi。
仔细阅读NetworkStream等等的文档,它说检测到断开连接的唯一方法是尝试写入套接字。相当公平,除了,当我尝试时,写入通过就好像没有什么不对。我可以这样写多条消息,一切似乎都很好。只有当我重新插入电缆时,它才会断开连接(所有消息都已缓冲?)。
将TcpClient设置为NoDelay,Flush()无论如何每次写入后都会有一个被调用。
我尝试过的
NetworkStream-没有喜悦CanWrite,Connected等一切回归真实TcpClient.Client.Poll( 1000, SelectMode.SelectWrite ); -返回trueTcpClient.Client.Poll( 1000, SelectMode.SelectRead ) && TcpClient.Client.Available == 0 -返回trueTcpClient.Client.Receive(buffer, SocketFlags.Peek) == 0-连接时,阻塞约10-20s,然后返回true。当没有服务器时,永远阻塞(?)NetworkStream.Write() -不抛出错误NetworkStream.BeginWrite()-不会引发错误(即使在调用时也不会EndWrite())WriteTimeout-无效那我在这做错了吗?NetworkStream写入应断开连接的套接字时,是否有任何方法可以引发错误(如应有的错误)?
我对保持活动没有任何问题(默认情况下,服务器将通知客户端一段时间内未收到任何消息,并且客户端将发送心跳信号),但在几分钟内,根据NetworkStream一切笨拙的。
它是针对游戏的,因此理想情况下,检测应该足够快(因为用户仍然可以在游戏中移动,直到需要进行服务器调用为止,其中有些会阻塞UI,因此游戏似乎坏了)。
我正在使用Unity,所以它是.Net 2.0
我正在用Java实现一个A*算法,我使用TreeSet作为保持打开列表排序的简单方法.如果你不熟悉A*,它基本上是一个从A到B获得最短路径的函数,而开放列表是Tiles根据它们与B的接近度排序的节点列表(在我的例子中).
我的对象实现了一个compareTo()排序函数,如下所示:
@Override
public int compareTo( Tile b )
{
return ( this.f< b.f) ? -1 : ( this.f> b.f) ? 1 : 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将一些图块添加到打开列表时,我的问题出现了 - TreeSet似乎compareTo()用来检查对象是否已经存在,而不是equals().由于两个不同Tiles的f值可能具有相同的值,因此TreeSet认为该对象已存在于列表中并且不会添加它.
根据文档(或至少,我如何阅读它),它应该使用equals:
"如果指定的元素不存在,则将其添加到此集合.更正式地说,如果集合中不包含元素e2,则将指定的元素e添加到此集合中(e == null?e2 == null:e.equals( e2))." (强调我的).
我怎样才能获得TreeSet的使用equals()时调用add()或contains()和compareTo()排序?对于info,我的Tile类不会覆盖该equals()函数,因此它应该是默认值return a == b.
如果我不想用TreeSet做什么,那么我应该使用的正确集合是什么?
当我们的服务器被更新(通常与付款相关)时,我正在使用PHPMailer发送电子邮件来支持.
我正在尝试将相关的电子邮件显示为Gmail对话,以便更轻松地支持员工遵循之前的更新/回复.我最初认为它是基于主题,但这似乎没有什么区别.
我的邮件代码:
$mail = new PHPMailer; // create a new instance
$mail->isSMTP(); // set that we're using stmp
$mail->CharSet = 'UTF-8'; // make sure it's utf-8 encoded
$mail->Host = 'smtp.gmail.com'; // the hostname of the mail server
$mail->Port = 587; // set the smtp port number (587 for authenticated TLS)
$mail->SMTPSecure = 'tls'; // set the encryption to use, ssl (deprecated) or tls
$mail->SMTPAuth = true; // should we use smtp authentication?
$mail->Username = MY_EMAIL_LOGIN; // the user name …Run Code Online (Sandbox Code Playgroud) 我最近一直在做一些纯Java开发,我正在使用一个暴露少量方法的外部库,每个方法都有可能抛出一个Exception.
Eclipse不会让我编译我的程序,除非我将每个调用包装在一个try-catch块中.到目前为止,没什么大不了的.
然后我注意到了一些东西,比如ArrayList.add()抛出的东西IndexOutOfBoundsException.我怎么称呼这样的东西而不需要把它包裹起来try..catch呢?Obv,在这种特殊情况下,如果每次都必须这样做,那将是非常恼人的,但是try-catch在某些情况下是如何以及为什么强制实施的,而不是其他情况?