有很多次我想要做的就是覆盖控制器上的特定动作而不是整个事情.在大多数情况下,我只是覆盖整个控制器,但我想知道是否有更好的方法?Magento是否有办法在控制器中覆盖单个动作,而原始控制器和其他动作保持不变?
例:
class Mage_Core_AwesomeController extends Mage_Core_Controller_Front_Action {
//has url of awesome/index
public function indexAction(){
//Some Awesome code
}
//has url of awesome/torewrite
public function torewriteAction(){
//Some Awesome code
}
}
class Local_Core_AwesomeController extends Mage_Core_AwesomeController {
//has url of awesome/torewrite
public function torewriteAction(){
//Some Awesome Override code
}
}
Run Code Online (Sandbox Code Playgroud)
所以url awesome/torewrite将转到Local_Core_AwesomeController,但url awesome/index将转到Mage_Core_AwesomeController.
这个例子显然是捏造的,它只是为了展示我理论上想要的东西.因此,请不要尝试更正示例,只是演示覆盖一个动作的最佳方法.
我认为重要的是要注意我不想重写网址,只是覆盖动作.如果没有重写网址,这可能是不可能的?只是当重写url时,布局中的标签会发生变化,我宁愿保持相同.
在询问时,如果你在同一个货物项目中有一个bin和一个lib,并且想要使用特定的rustc cfg选项构建bin和lib,那么它就不起作用了.
您可以使用rustc cfg选项构建一个或另一个,但不能同时构建两者.如果你尝试构建lib然后在bin编译bin时它重新编译lib而没有rustc选项.
有没有办法做到这两点,如果不是为什么?我注定要创建自己的构建脚本吗?如果是这样,货物的重点是什么?
好吧,也许我有点戏剧性
说我有类似的东西:
SRC/lib.rs
pub mod mylib {
#[cfg(not(dosomething))]
pub use self::without_cfg::dosomething;
#[cfg(dosomething)]
pub use self::with_cfg::dosomething;
mod with_cfg {
pub fn dosomething() {
println!("config option");
}
}
mod without_cfg {
pub fn dosomething() {
println!("no config option");
}
}
}
Run Code Online (Sandbox Code Playgroud)
SRC/main.rs
extern crate modules;
use modules::mylib::dosomething;
fn main() {
dosomething();
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我使用dosome的cfg选项编译,我会得到一个函数的版本,但如果我没有配置,我会得到"默认"行为或其他什么.
现在,如果我尝试使用货物rustc进行编译,我将永远无法使用lib中设置的cfg dosomething来获取bin的版本.
我能够在货物上做到最接近的是:
cargo rustc -v --lib -- --cfg dosomething
cargo rustc -v --bin [bin name] -- --cfg dosomething
Run Code Online (Sandbox Code Playgroud)
第一个命令将使用cfg编译lib,但第二个命令将重新编译 lib而不使用cfg以创建bin. …
在Go(golang)中获取机器epsilon的最简单方法是什么?那么浮点数的其他方面如精度,最小指数,最大指数,摆动等等呢?
我意识到有不同浮点类型的最大值和最小值的math/const包(http://golang.org/src/pkg/math/const.go),但没有其他信息.
我想知道的一个原因是验证我已达到机器可以执行的给定计算的最大精度,以便我不会提前退出或尝试更长时间.
另一个只是好奇心.
谢谢
编辑:
为了好玩,我在学校的一些笔记中查找了如何手动为这些操作计算epsilon,这里是c ++的粗略翻译http://play.golang.org/p/XOXwIdNfsa享受
编辑:从下面评论(感谢更加惯用的寻找epsilon的方式):
使用epsilon := math.Nextafter(1, 2) - 1 游乐场 - 尼克克雷格伍德 3月5日8:07
我知道你可以打电话给:
rustc -Z unstable-options --pretty=expanded
Run Code Online (Sandbox Code Playgroud)
看到宏扩展,是否有类似的东西显示文件/包中的变量的生命周期?
我看到有一个pretty=typed,但它没有显示生命周期,因为它显示了一切的类型.
我可以看到一个选项来显示生命周期对新的Rust程序员(比如我)非常有帮助.
我有一个功能:
fn awesome_function<F>(v: Vec<u64>, f: F)
where F: Fn(u64) -> String
{ /* ... */ }
Run Code Online (Sandbox Code Playgroud)
有没有办法调用在生成的线程中传递的函数?就像是:
...
thread::spawn(move || f(1));
...
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的方法,但我得到了一个错误 error: the trait core::marker::Send is not implemented for the type F [E0277]
当我有一个Option并想要一个内部的东西或创建一些东西,如果它是一个None我得到一个错误.
示例代码:
fn main() {
let my_opt: Option<String> = None;
let ref_to_thing = match my_opt {
Some(ref t) => t,
None => &"new thing created".to_owned(),
};
println!("{:?}", ref_to_thing);
}
Run Code Online (Sandbox Code Playgroud)
错误:
error[E0597]: borrowed value does not live long enough
--> src/main.rs:6:18
|
6 | None => &"new thing created".to_owned(),
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-
| | |
| | temporary value dropped here while still borrowed
| temporary value does not live long enough
...
10 | }
| …Run Code Online (Sandbox Code Playgroud)