使用PHP v5.3中的后期静态绑定,可以static在接口中有用地声明方法; 对于PHP v5.4中的特征,方法可以是static或abstract但不是两者.这似乎是不合逻辑和不一致的.
特别地,假设一个具有特征提供所有实现的接口,静态方法除外; 除非在特征中声明了该方法,否则静态分析器会对特征内的任何引用进行跟踪.但是,在特征中提供具体实现不再强制实现/使用类来提供自己的实现 - 这是危险的; abstract static会是理想的,但不允许.
这个矛盾的解释是什么?你会如何建议解决这个问题?
interface MyInterface
{
public static function getSetting();
public function doSomethingWithSetting();
}
trait MyTrait
{
public abstract static function getSetting(); // I want this...
public function doSomethingWithSetting() {
$setting = static::getSetting(); // ...so that I can do this
/* ... */
}
}
class MyClass implements MyInterface
{
use MyTrait;
public static function getSetting() { return /* ... */ }
}
Run Code Online (Sandbox Code Playgroud) 示例数据:
????????????????????????????????????????????????????????????? ? ID ? START ? STOP ? USER ? FILE ? SIZE ? ????????????????????????????????????????????????????????????? ? 1 ? 1330133409 ? 1330133410 ? user1 ? file1.zip ? 300000 ? ? 2 ? 1330133409 ? 1330133410 ? user1 ? file2.zip ? 300500 ? ? 3 ? 1330133409 ? 1330133410 ? user2 ? file1.zip ? 300000 ? ? 4 ? 1330133409 ? 1330133410 ? user2 ? file2.zip ? 300500 ? ? 5 ? 1330133409 ? 1330133410 ? user1 ? file3.zip ? 500000 …
我已将问题减少到以下测试用例:
创建一个新的工作簿;
输入一个恒定值,例如,123成Sheet1!A1;
定义一个名称,例如foo,指代公式=CHOOSE(!$A$1, Sheet1!$A$1);
输入常数值1成Sheet2!A1;
将公式输入=foo到其他一些单元格中Sheet2,例如Sheet2!B1:观察到,如预期的那样,结果是Sheet1!A1上面步骤2中输入的值;
然后创建一个包含以下代码的VBA过程:
Sheets("Sheet1").Outline.ShowLevels 1
Run Code Online (Sandbox Code Playgroud)您会注意到步骤5中的单元格现在包含#VALUE!错误.
此外,简单的工作表重新计算(无论是使用F9密钥还是Application.Calculate方法)都无法解决问题:必须改为从VBA 执行完全重新计算(使用Application.CalculateFull方法),或者从交互式UI 执行完全重建(使用CTRL+ ALT+ SHIFT+ F9组合键).
通过反复试验,我确定了出现这种情况:
所述CHOOSE()索引参数必须涉及的相对表单元格引用(未常量或绝对表的参考文献);
CHOOSE()被索引的value参数必须包含对另一个工作表的引用;
显示的大纲级别的更改必须来自VBA 过程(而不是来自交互式UI或VBA立即窗口中的大纲控件); 和
所述ShowLevels方法调用(其参数是不相关的)必须被施加到被之中任何值的引用的片(虽然不是索引)参数CHOOSE().
这是怎么回事?
我非常希望将我在值参数中引用的工作表折叠CHOOSE()到其最高大纲级别而不触发此错误,因为从UX的角度来看,完全重新计算我的实际工作簿(仍然只有几秒钟)是不可取的.
对于变通方法的建议(虽然仍然使用包含该CHOOSE()函数的定义名称以及相对表索引参数)将是最受欢迎的!
我的平台:Windows 7 Home Premium(SP1,64位)上的Excel …
我试图使用带有预准备语句的存储函数但没有取得任何成功.
MySQL准备语句但后来没有执行它,没有给出错误,它只是默默地失败.
这是*函数:
drop function if exists lineDistanceC;
delimiter //
CREATE FUNCTION lineDistanceC (la1 DOUBLE, lo1 DOUBLE, la2 DOUBLE, lo2 DOUBLE) RETURNS DOUBLE
BEGIN
SET @r = 6371;
SET @lat1 = RADIANS(la1);
SET @lon1 = RADIANS(lo1);
SET @lat2 = RADIANS(la2);
SET @lon2 = RADIANS(lo2);
SET @x = (@lon2-@lon1) * COS((@lat1+@lat2)/2);
SET @y = (@lat2 - @lat1);
RETURN (SQRT((@x*@x) + (@y*@y)) * @r);
END
//
delimiter ;
Run Code Online (Sandbox Code Playgroud)
它按预期在命令行上工作,并在SELECT语句中替换硬编码的double然后允许它按预期工作,因此周围的代码也很好.
我已经启用了CLIENT_MULTI_STATEMENTS作为MySQL连接参数,我怀疑它只涉及CALLing程序,但它是一个值得抓住的吸管.
该声明使用以下方式准备:
strcpy (sqlStr, "SELECT lineDistanceC(Y(pnt),X(pnt), ?, ?) FROM mytable");
MYSQL_STMT *statement;
if …Run Code Online (Sandbox Code Playgroud) 我在注释块中有一个长字符串,就像这个(参见query属性):
/**
* @Table(name="messages")
* @Entity
* @NamedNativeQueries({
* @NamedNativeQuery(
* name = "searchMessages",
* resultClass= "__CLASS__",
* query = "SELECT * FROM message WHERE id IN (SELECT post_id FROM (SELECT m.post_id, COUNT(*) AS words FROM phpbb_search_wordmatch m INNER JOIN phpbb_search_wordlist w ON w.id = m.word_id WHERE blah blah blah blah ...."
* )
* })
*/
class Message {
...
Run Code Online (Sandbox Code Playgroud)
我想分成多行,以便更具可读性.
是否可以在多行中打破查询字符串?
我经历了一些代码,是广泛大意如下迷迷糊糊的,但不能为我的生命捉摸为什么笔者试图删除bar从bars之前再加入它:
import java.util.Set;
import java.util.HashSet;
class Foo {
private final Set<Object> bars = new HashSet<>();
public void addBar(final Object bar) {
bars.remove(bar); // WHY ????
bars.add(bar);
}
public Object[] getBars() {
return bars.toArray(new Object[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
我能想到的就是它预期(或遗留)一个Set对插入顺序敏感的不同实现,例如java.util.LinkedHashSet(尽管没有任何关于代码或用例表明插入顺序会引起任何兴趣) -但也许我还缺少一些东西?
也许这可能是菜鸟,但我正在搞几张桌子.
我有表A约45,000条记录
我有表B大约150万条记录
我有一个问题:
update
schema1.tablea a
inner join (
SELECT DISTINCT
ID, Lookup,
IDpart1, IDpart2
FROM
schema1.tableb
WHERE
IDpart1 is not NULL
AND
Lookup is not NULL
ORDER BY
ID,Lookup
) b Using(ID,Lookup)
set
a.Elg_IDpart1 = b.IDpart1,
a.Elg_IDpart2 = b.IDpart2
where
a.ID is NOT NULL
AND
a.Elg_IDpart1 is NULL
Run Code Online (Sandbox Code Playgroud)
所以我在ID,Lookup上强制索引.每个表都有这些列的索引,但由于子查询我强制它.
它正在运行,它真的应该采取,我想在5分钟之内......
我的问题是关于索引,而不是查询.
我知道你不能在有序索引中使用哈希索引.
我目前在ID,Lookup上都有索引,并且作为一个索引,它是一个B-Tree索引.基于我的WHEREClause,哈希索引是否适合作为优化技术?
我可以有一个哈希索引,其余的索引是B树索引吗?
这不是主要关键字段.
我会发布我的解释,但我更改了这些表上的名称.基本上它只是为ID使用索引...而不是使用ID,Lookup,我想强制它使用它们,或者至少把它变成另一种索引,看看是否有帮助?
现在我知道MySQL足够聪明,可以确定哪个索引最合适,那么它正在做什么?Lookup字段映射ID的第一部分和第二部分......
对此有任何帮助或见解表示赞赏.
一个EXPLAIN在UPDATE我拿出子查询后.
+----+-------------+-------+------+-----------------------------+--------------+---------+-------------------+-------+-------------+ | id | select_type | table | type | possible_keys | …
每当我在a 之后直接做一个SELECT语句时,我得到最后一个插入的行.WHERE id is NULLINSERT
我正在使用MySQL 5.1.73.
它直接发生在MySQL shell中; 这是我的控制台:
mysql> CREATE TABLE testing (
-> id int(11) NOT NULL AUTO_INCREMENT,
-> name VARCHAR(200),
-> PRIMARY KEY (id)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO testing (name) VALUES ('test');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM testing WHERE id IS NULL;
+----+------+
| id | name |
+----+------+
| 1 | test |
+----+------+ …Run Code Online (Sandbox Code Playgroud) 我有以下表结构,为方便起见,它也在sqlfiddle上:
+---------+-----------+---------+----------+-----------+-------------------+-----------------------------------+--------+--------------+-------------+---------------+-----------+ | rule_id | parent_id | left_id | right_id | rule_type | rule_title | rule_description | public | parse_bbcode | parse_links | parse_smilies | group_ids | +---------+-----------+---------+----------+-----------+-------------------+-----------------------------------+--------+--------------+-------------+---------------+-----------+ | 1 | 0 | 1 | 6 | cat | Sample Category 1 | | 1 | 0 | 0 | 0 | 1 2 7 | | 2 | 1 | 2 | 3 | rule | Sample Rule 1 | This is a sample rule description | …
在 2018 年 2 月题为“ Rust 中的内存安全:C 案例研究”的笔记中,Will Crichton 写道:
拉斯特提供吃生的三分球,这是我们使用的所有权的能力
slice::from_raw_parts_mut和Box::from_raw它告诉防锈处理内存指针作为堆中分配的数组。转让所有权后,假设内存有效且大小/类型正确,Rust 会应用其通常的内存安全和包含检查。
他上面提到的代码的相关部分是:
let mut new_data = unsafe {
let ptr = Heap::default()
.alloc(Layout::array::<isize>(new_capacity).unwrap())
.unwrap() as *mut isize;
Box::from_raw(slice::from_raw_parts_mut(ptr, new_capacity))
};
Run Code Online (Sandbox Code Playgroud)
但是,Box::from_raw状态文档(已添加强调):
由于 Box 分配和释放内存的方式未指定,因此传递给此函数的唯一有效指针是通过该函数从另一个 Box 获取的指针
Box::into_raw。
为避免疑义,(实验)Heap上面使用API来执行存储器分配(因为在锈病1.27.0移除)直接调用__rust_alloc在其alloc方法和因此ptr是不从得Box::into_raw。
将Box::from_raw原始指针传递给新分配的内存以让 Rust 获得该内存的所有权并执行其通常的安全和包含检查是否有效,尽管不受支持?特别是,当出现的 Box 被销毁时,Rust 会释放该内存吗?
如果没有,怎么能一个强制锈病采取的记忆这种所有权不是通过其安全的方法分配其他?
mysql ×5
php ×3
abstract ×1
annotations ×1
b-tree ×1
c ×1
database ×1
doctrine-orm ×1
excel ×1
excel-2010 ×1
excel-vba ×1
hash ×1
heap-memory ×1
indexing ×1
insert ×1
java ×1
nested-sets ×1
null ×1
oop ×1
ownership ×1
pointers ×1
rust ×1
select ×1
set ×1
sql-update ×1
static ×1
traits ×1
vba ×1