我正在玩NetHack,因为我正在为自己编写简化版本.我的问题是,走廊是如何实施的?我一直试图想出一种方法,但现在却无法想出任何合理的方法.
我在CodeIgniter中有这个查询:
$query = $this->db->query("
SELECT u.id
, u.first_name, u.last_name
, u.email_address
, g.id AS group_id
, g.name AS group_name
, g.human_readable_name AS human_readable_group_name
FROM users AS u
JOIN groups AS g
ON u.group_id = g.id
ORDER BY u.last_name
");
return $query->result();
Run Code Online (Sandbox Code Playgroud)
当我var_dump
连续,我得到这个:
object(stdClass)#22 (4) {
["id"]=>
string(2) "19"
["first_name"]=>
string(9) "rightfold"
// etc
}
Run Code Online (Sandbox Code Playgroud)
id
并且group_id
都integer
在PostgreSQL中,但是$query->result()
将它们作为字符串返回.如何告诉CodeIgniter使用正确的数据类型(text
s为字符串,integer
s为整数,timestamp
s为DateTime
对象等)返回字段?
我在PHP 5.3.15上使用CodeIgniter 2.1.4.
我只能找到关于逆的东西; 使用Clojure实现Java接口.但是,我想在Clojure中编写一个程序,并允许用Java扩展它.例如:
# P.clj
(defprotocol P
(f [a])
(g [a b]))
# I.java
public class I implements P {
public Object f(Object a) { … }
public Object g(Object a, Object b) { … }
}
Run Code Online (Sandbox Code Playgroud)
另外,我如何指定参数类型,所以我不必Object
在任何地方使用?
我目前看到的唯一选择是使用点符号并依赖于duck typing,但我更喜欢Java端的接口实现的编译时验证.
我试图在Perl中使用简单的模块:
火焰/ Text.pm:
package Flame::Text;
sub words { … }
1;
Run Code Online (Sandbox Code Playgroud)
火焰/ Query.pm:
package Flame::Query;
use Flame::Text qw(words);
sub parse_query { words(shift); }
parse_query 'hi';
1;
Run Code Online (Sandbox Code Playgroud)
为什么我收到以下错误消息?
&Flame::Query::words
在Flame/Query.pm第3行调用的未定义子例程.
以下工作正常:
package Flame::Query;
use Flame::Text;
sub parse_query { Flame::Text::words(shift); }
parse_query 'hi';
1;
Run Code Online (Sandbox Code Playgroud) 在大约十年前的一个项目中,我们发现std::vector
动态分配导致了严重的性能损失.在这种情况下,它分配了许多小向量,因此快速解决方案是编写一个类似于向量的类,包装在基于堆栈的预分配char
数组中,用作其容量的原始存储.结果是static_vector<typename T, std::size_t Max>
.如果您了解一些基础知识,这样的事情很容易写,你可以在网上找到很多这样的野兽.事实上,现在也有一个提升.
现在在嵌入式平台上工作,我们碰巧需要一个static_basic_string
.这将是一个字符串,它预先在堆栈上分配固定的最大内存量,并将其用作容量.
起初我认为这应该相当容易(static_vector
毕竟它可以基于现有的),但再看看std::basic_string
界面我不再那么肯定了.它比std::vector
界面更复杂.特别是实现find()
功能系列std::basic_string
不仅仅是一项繁琐的工作.
这让我再次思考.毕竟,这就是创建分配器的原因:基于new
和delete
使用其他方法替换分配.但是,要说分配器接口不实用将是轻描淡写.有一些文章在那里解释它,但有一个原因,我在过去的15年中看到这么少的本土分配器.
所以这是我的问题:
如果你必须实现一个basic_string
相似的,你会怎么做?
static_basic_string
?std::basic_string
?与往常一样,对我们来说存在相当重要的限制:在嵌入式平台上,我们与GCC 4.1.2绑定,因此我们只能使用C++ 03,TR1和boost 1.52.
这两个GADT声明之间有区别吗?
data A a b where
...
data A :: * -> * -> * where
...
Run Code Online (Sandbox Code Playgroud) 我已经看到C#6中的新功能允许代码跳过检查if
语句null
.
例如:
return p?.ToString();
Run Code Online (Sandbox Code Playgroud)
如何调用p
需要作为参数传递的方法(没有旧的if
/ else
)?
我通常用C#pre-6编写的方式:
p != null ? callmethod(p) : null
Run Code Online (Sandbox Code Playgroud)
在C#6中有更好的东西吗?
例如,取open(2),其中包含以下概要:
Run Code Online (Sandbox Code Playgroud)#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); int creat(const char *pathname, mode_t mode);
我应该包括所有这些头文件还是其中任何一个?在前一种情况下,我如何知道哪些头文件包含哪些函数,宏和typedef?
>>> print(len.__doc__)
len(module, object)
Return the number of items of a sequence or mapping.
>>> len(os, 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: len() takes exactly one argument (2 given)
Run Code Online (Sandbox Code Playgroud)
请注意docstring第一行中的两个参数.
你len
什么时候会传递两个参数?文档字符串不正确吗?我正在使用Python 3.4.0.
有没有办法使用python API甚至任何语言的API来实现BQL?