假设我创建了一个名为的类Bar
.该文件Bar.pm
开始
package Bar;
Run Code Online (Sandbox Code Playgroud)
为避免与其他Bar
类冲突,我将文件放在子目录中Foo
.所以现在,当我使用课程时,我必须写
use Foo::Bar;
Run Code Online (Sandbox Code Playgroud)
我的问题是,我是否需要将类的名称更改为Foo::Bar
?换句话说,我是否需要改变的第一线Bar.pm
,以
package Foo::Bar;
Run Code Online (Sandbox Code Playgroud)
?问题是,如果我这样做,我现在必须将该类称为Foo::Bar
无处不在,例如
my $obj = Foo::Bar->new();
Foo::Bar->doClassMethod();
Run Code Online (Sandbox Code Playgroud)
这是恼人的(同样的问题在讨论这个问题),尤其是因为我很喜欢的类方法.
我遇到了包含大型double的JSON反序列化的问题.基本上,我可以序列化这样的字典
NSDictionary *dict = @{@"doubleVal": @DBL_MAX};
Run Code Online (Sandbox Code Playgroud)
哪个序列化没有麻烦
{"doubleVal":1.797693134862316e+308}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试对数据进行反序列化,它就会爆炸.
一个小单元测试,演示了这个问题:
- (void)test_600_doubleJSON {
NSDictionary *dict = @{@"doubleVal": @DBL_MAX};
NSError *jsonError, *jsonResponseError;
NSData *data = [NSJSONSerialization dataWithJSONObject:dict
options:0
error:&jsonError];
id jsonResponse = [NSJSONSerialization JSONObjectWithData:data
options:0
error:&jsonResponseError];
STAssertNil(jsonError, @"JSON error: %@", jsonError.localizedDescription);
STAssertNil(jsonResponseError,
@"JSON response error: %@",
jsonResponseError.localizedDescription);
}
Run Code Online (Sandbox Code Playgroud)
最后一个断言失败,如下:
JSON response error: The operation couldn’t be completed. (Cocoa error 3840.)
Run Code Online (Sandbox Code Playgroud)
如果我DBL_MAX
用(更大)更小的值替换,则测试按预期完成.
我正在使用PDFBox 2.0.0-SNAPSHOT在Java中构建PDF.它对于非常基本的字符(例如[a-zA-Z9-0]
)工作正常,但是我为稍微更高级的字符(例如’
(quoteright
))收到编码错误.这是我的代码:
PDDocument pdf = new PDDocument();
PDPage page = new PDPage(PDRectangle.A4);
pdf.addPage(page);
PDPageContentStream contents = new PDPageContentStream(pdf, page);
PDFont font = PDType1Font.HELVETICA;
contents.beginText();
contents.setFont(font, 12);
// ...
String text = "’";
contents.showText(text);
contents.endText();
contents.close();
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
无法在字体Helvetica中编码U + 2019.Type 1字体仅支持8位代码点
我在PDF规范的 D.1节中查找了非嵌入字体支持的字符,并且应支持此字符.
的确,如果我使用这个技巧,我可以插入正确的字符:
// ...
// String text = "’";
// contents.showText(text);
byte[] commands = "(x) Tj ".getBytes();
commands[1] = (byte)145; // = 221 octal = quoteright in WinAnsi
contents.appendRawCommands(commands);
// …
Run Code Online (Sandbox Code Playgroud) 我是Clojure的新手,我试图通过重新绑定将输出重定向到文件*out*
.在一个简单的例子中,它很好地工作:
(binding [*out* (new java.io.FileWriter "test.txt")]
(println "Hi"))
Run Code Online (Sandbox Code Playgroud)
这符合我的预期,将"Hi"打印到文件test.txt.但是,如果我引入一个for
循环,事情就会出错:
(binding [*out* (new java.io.FileWriter "test.txt")]
(for [x [1 2]]
(println "Hi" x)))
Run Code Online (Sandbox Code Playgroud)
这次,所有输出都转到stdout,文件为空.这里发生了什么?
我正在使用Leiningen,如果这有任何区别:
Leiningen 2.0.0 on Java 1.7.0_13 Java HotSpot(TM) 64-Bit Server VM
Run Code Online (Sandbox Code Playgroud)