V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  dogfeet  ›  全部回复第 3 页 / 共 4 页
回复总数  78
1  2  3  4  
@vghdjgh 是的。 Box 也是可以的。
其实这么写挺蛋疼的,必须要用 trait object ,因为闭包的类型是匿名的。用 Map 类似的结构,如果闭包是传入的,那么传入的类型是可以推倒出来的,如果没有传入,就很麻烦了。
其实这个需求很早就有在讨论了,开启 conservative_impl_trait 就可以使用 impl trait 这种方式约束返回类型了。

#![feature(conservative_impl_trait)]

fn sum<F, G>(f: F, g: G) -> Box<(impl Fn(i32) -> i32)>
where F: Fn(i32) -> i32,
G: Fn(i32) -> i32
{
Box::new(move |x: i32| f(x) + g(x))
}

fn main() {
let f1 = |x: i32| x * x;
let f2 = |x: i32| x * 2 + 1;
let a = sum(f1, f2);
println!("{}", a(1i32));
println!("{}", a(2i32));
println!("{}", a(3i32));
}
声明周期标记的有问题, sum 中的 2 个参数都被标记为 ’ static 了,实际传入的壁报声明周期并不是 'static 的。而且返回的 Box 实际上是引用了传入的 2 个参数,实际上返回值这里有个非常绕的问题。正常 move 的 closure 会使用非引用的形式捕获,但是由于你传入的是 2 个 trait object ,所以无论怎样返回的 Box 都有生命周期的依赖。
改写了一下,下面的形式可以通过,总之, Rust 的闭包我是真心感觉蛋疼:

```rust
fn sum<'a, F, G>(f: &'a F, g: &'a G) -> Box<(Fn(i32) -> i32) + 'a>
where F: Fn(i32) -> i32,
G: Fn(i32) -> i32
{
Box::new(move |x: i32| f(x) + g(x))
}

fn main() {
let f1 = |x: i32| x * x;
let f2 = |x: i32| x * 2 + 1;
let a = sum(&f1, &f2);
println!("{}", a(1i32));
println!("{}", a(2i32));
println!("{}", a(3i32));
}
```
2017-02-13 21:01:54 +08:00
回复了 keelii 创建的主题 Vim 可能是 Windows 下最漂亮的 Gvim 配置了
同难受呐。 @zwik 求分享去掉边框的版本 ):
2016-04-11 09:44:36 +08:00
回复了 ifane 创建的主题 程序员 程序员的桌面都什么样子
到底是要看壁纸还是桌面呀?
2016-01-25 09:47:47 +08:00
回复了 elmander 创建的主题 程序员 unity 手游防御变速器的方案
根据客户端传过来的一个值来检测,等于一定程度上的信任客户端,就怕这个值被篡改。其实完全可以根据服务器上同一个玩家的 2 次战斗间隔来呀,还要加上战斗力的一些校验。
写入的数据中有指针吗?
2015-12-02 10:36:03 +08:00
回复了 yx30 创建的主题 Vim 如何更好的学习 vim?
每个人的习惯不同,其实最终个人使用频度比较高的都是部分功能。像我使用最多的一般也就是移动,编辑,搜索,窗口分割了。

移动除了 hjkl 等还有很多细分的比如 w,e,b,c-e,c-y,c-d,c-u,gg,G

编辑常用的多是, r,x,d,cw,dw,dd,dy,p,之类的。

搜索,窗口分割都是固定的几个。

其实每个人常用的都是频度比较高的一部分功能。找到你最习惯用的,多用就行了。其他的等要用时再查手册也不迟。像 s, %s, 宏之类的。

配置一般不要去改原生快捷键了,插件也不用装太多。 vim 说来说去,插件一堆,都说自己装了 xx 插件很好用,其实很多插件都或多或少有些细节问题,有时又是兼容问题。经常发生装了 1 个插件,发现有个地方很不顺手,于是再加个类似的插件互补,然后版本更新后,发现又出现兼容性问题。你用起来不爽,慢慢的用的频度也就不那么高了。熟悉原生配置,方便你切换编辑器或 IDE 时更好的过度(一般流行的 IDE 都有插件实现很纯正的 Vim 模式)

总之就是多用,很多很舒服的功能,用上瘾形成惯性后,自然就记住了。比如 C++ 系语言语句要以分号结尾,但有时光标又在嵌套层次很深的括号或参数表达式中,这时候 A 跳到行尾就很方便了。而有些不需要分号的语言则又可以在这些层次很深的部分 直接通过 o, O 开启新行。(有很多 IDE 都有各自类似的功能,但他们的快捷键互不相同,切换使用时还有有些成本的, Vim 系快捷键则比较通用)

个人比较习惯 () 一起连输,这时光标在括号外面,要快速进入括号内只需 esc,i (两手可以几乎同时按) 习惯了其实与按方向键差不多的感觉。{} 也是 esc,i,回车,O 。这个操作比用方向键顺手不少。

其实最好用的还是窗口分割系的快捷键,习惯了分屏,窗口间移动,复制黏贴,看写代码太舒服了。最主要的是,还能在其他 IDE 中享用同样的快捷键,像 IDEA 就能非常方便的用 vim (插件) 快捷键分屏,效率高的爆。

其实最强大的功能还是 IDE + Vim 插件, IDE 往往都有工程的概念(这比 Vim 中的一些项目管理插件要来的靠谱简便的多),可视化的配置,对语义更懂,对重构更友好。看大型项目时,更智能精准的跳转,锁定,搜索,往往要比你用 Vim + 插件的组合更好的让你理清代码脉络。
2015-11-28 17:04:22 +08:00
回复了 XadillaX 创建的主题 Node.js 一道关于 Node.js 全局变量的题目
@Arrowing 是否动态语言与是否应该有这个坑关系不大, Lua 也同样是动态语言。 JS 在这个地方的解决方案的确非常丑。
2015-11-27 09:41:07 +08:00
回复了 XadillaX 创建的主题 Node.js 一道关于 Node.js 全局变量的题目
需要用这么大篇文章来解释这个 this 的坑,也是佩服 JS 这门语言。 Lua 中的环境与 self 语法糖做的事情几乎与 JS 一样,但是就没有这个坑,理解起来简直不用脑。还有与 prototype 对应的元表。 JS 有硬伤啊。
2015-11-10 09:44:47 +08:00
回复了 megabits 创建的主题 程序员 刚刚催了下苹果的 app 审核
@urmyfaith 更恐怖是的, 2 天之后我们又这么干了一次, 6K RMB 这次是 23 个小时候通过。
2015-11-10 09:39:54 +08:00
回复了 megabits 创建的主题 程序员 刚刚催了下苹果的 app 审核
@zwzmzd 不知道现在有加急业务吧, 1W RMB 一次,有次凌晨三点提审,早上 9 点通过。哪儿都有腐败啊。
你是先修改了 IAP ,然后提交了包,然后这途中又修改过 IAP 吗?如果在应用等待审核途中,修改了 IAP ,这个我不确定能否通过与 reviewer 沟通来处理。(-_-メ)
应该都到不了人工审核这一步啊。
修改 IAP 信息后,必须要伴随一次新包的提交。而且是要在之后。
2015-07-30 11:04:58 +08:00
回复了 Navee 创建的主题 程序员 公司开发部门 GIT SVN 之争
@konakona 如果你的要求中有必须会 Git 这条,请写明。
我觉得应聘者喷你喷的非常有道理。如果都像你这样,是不是某个团队招 C++,来了劈头就问人你会(喜)用(欢)Vim吗?什么?你不会(喜欢)?那不好意思,你太Low了。
到底谁更Low?你可以把 Vim 换成任何你想贴的标签来显得你高端与众不同。
你还可以说不会 PHP 的都去死,不配做程序员。
2015-07-30 10:44:46 +08:00
回复了 Navee 创建的主题 程序员 公司开发部门 GIT SVN 之争
V2EX 不乏那种“不会用 git 就不配做程序员的言论”。
在我眼中,perforce 比 git 不知道好用多少,因为在我们的场景下面 git 就是不好用。
用 git 就是创新了?就是新人类了?不用就是懒?就是腐朽?
2015-07-29 09:49:36 +08:00
回复了 yh7gdiaYW 创建的主题 程序员 有没有做手游自动化测试的?
手游项目真的是非常随意的,功能变更之快往往会让你瞠目结舌。
一周将前2周所有的模块UI/逻辑全部变掉,你根本来不及修改测试用例,而且还没时间补,下一周又有可能将本周内容修改掉。
手游就是这么任性。大家都是在不停的试,所以国内手游必须用脚本做动态更新。像我们定一周一更的频率已经算低的了。策划,运营手上有了这个尚方宝剑,简直是有如神助啊。
2015-07-28 09:50:04 +08:00
回复了 yh7gdiaYW 创建的主题 程序员 有没有做手游自动化测试的?
脸红 - -||
我们团队已经经历了2款手游项目,客户端到目前为止几乎没做过自动化测试。。。
2015-05-25 14:11:24 +08:00
回复了 cloudhunter 创建的主题 程序员 Java 转 C++,有什么建议吗?
@cloudhunter 是呀,直接用 unique_ptr/shared_ptr 或者引用。倒不是说这个高端或者说裸指针难理解,主要是这样干省事呀。

还有就是,我觉得吧,C++ 和 Java 还是挺像的,要说比较大的区别,那应该是 C++ 是确定性析构,然后RAII 是精髓哈。
2015-05-25 12:24:08 +08:00
回复了 cloudhunter 创建的主题 程序员 Java 转 C++,有什么建议吗?
开始尽量不要直接用裸指针(/逃)
2015-05-25 12:11:27 +08:00
回复了 banxi1988 创建的主题 程序员 招了个比较菜的开发,是继续培养还是放弃?
@learnshare 本来不想这么说的。
轮子哥喷git不是一次两次了。会用git既不是充分条件也不是必要条件。我也可以在你没跟进学习git的时间点说这句话。
1  2  3  4  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5585 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 07:01 · PVG 15:01 · LAX 23:01 · JFK 02:01
Developed with CodeLauncher
♥ Do have faith in what you're doing.