小编And*_*rea的帖子

CakePHP:获取模型中的用户信息

我在模型中移动了一些查找代码.

我之前在我的控制器中

$this->Book->Review->find('first', array(
    'conditions' => array(
        'Review.book_id' => $id,
        'Review.user_id' => $this->Auth->user('id')
    )
));
Run Code Online (Sandbox Code Playgroud)

所以在我的评论模型中我放了类似的东西

function own($id) {
    $this->contain();
    $review = $this->find('first', array(
        'conditions' => array(
            'Review.book_id' => $id,
            'Review.user_id' => AuthComponent::user('id')
        )
    ));
    return $review;
}
Run Code Online (Sandbox Code Playgroud)

所以我从模型中静态地调用AuthComponent.我知道我可以为方法AuthComponent :: password()执行此操作,这对验证很有用.但我特别是使用方法AuthComponent :: user()得到错误

致命错误:在第663行的/var/www/MathOnline/cake/libs/controller/components/auth.php中调用非对象的成员函数check()

有没有办法从模型中获取有关当前登录用户的信息?

authentication cakephp model

12
推荐指数
4
解决办法
2万
查看次数

在Scalaz7中管理导入

我在项目中使用scalaz7,有时我会遇到导入问题.最简单的方法是开始

import scalaz._
import Scalaz._
Run Code Online (Sandbox Code Playgroud)

但有时这会导致冲突.到目前为止我一直在做的事情是下面一个有点痛苦的过程:

  • 找出一个需要与我的实际代码相同导入的最小示例
  • 在单独的项目中复制该示例
  • 使用选项编译它,-Xprint:typer以找出隐式解析后代码的外观
  • 导入原始项目中所需的含义.

虽然这有效,但我想简化它.我看到scalaz7有更多细粒度的导入,但我不完全了解它们的组织方式.例如,我看到一个人可以做到

import scalaz.std.option._
import scalaz.std.AllInstances._
import scalaz.std.AllFunctions._
import scalaz.syntax.monad._
import scalaz.syntax.all._
import scalaz.syntax.std.boolean._
import scalaz.syntax.std.all._
Run Code Online (Sandbox Code Playgroud)

等等.

这些子进口是如何组织的?

举个例子,假设我想使用验证.我需要什么,例如注入验证含义并进行以下编译?

3.fail[String]
Run Code Online (Sandbox Code Playgroud)

如何制作ValidationNEL[A, B]一个实例Applicative

scala scalaz scalaz7

12
推荐指数
1
解决办法
1159
查看次数

Javascript原始类型和相应的对象

在Javascript中,并非每个数据都是对象.存在一些原始类型,如字符串,数字和布尔值,它们不是对象.对于每一个这种类型的存在的构造,其与类似的行为输出的对象:Number,StringBoolean.为了混淆问题,实际上可以在原始类型上调用方法 - 它们将在此操作期间转换为相应的对象,然后转换回来.例如,人们可以做到

var a = 4.1324;
a.toFixed(1) // Outputs 4.1
Run Code Online (Sandbox Code Playgroud)

然而,如果您尝试将基本类型和对象与严格相等进行比较,则会出现差异

var a = new Number(4);
var b = 4;
a === b; // False!!!
typeof a; // 'object'
typeof b; // 'number'
Run Code Online (Sandbox Code Playgroud)

实际上,一个人试图比较对象,但结果却是不同的:

var a = new Number(4);
var b = new Number(4);
a === b; // False!!!
Run Code Online (Sandbox Code Playgroud)

(从概念的角度来看,我有点理解这种区别.对象可以有其他属性,因此不应该比较相等,除非它们实际上是相同的.所以如果我们想让4 === 4我们需要使用不是但是,任何充分动态的编程语言都面临着这种困境,但Javscript是我所知道的唯一一种有两种类型 - 一种是对象的而一种不是 - 用于数字或字符串.)

为数字,字符串和布尔值保留两个单独的表示形式有什么好处?在什么情况下,人们需要区分原始类型和对象?

javascript primitive-types

11
推荐指数
1
解决办法
4221
查看次数

构建Sphinx文档

我已经开始使用Sphinx记录Python项目.这是我第一次使用它 - 我习惯使用类似JavaDoc语法的工具,我有些疑惑.

因为我想要的文档出现在代码的旁边,我利用的.. automodule::,.. autoclass::.. automethod::指令.所以我的文档结构如下:index.rst包含TOC和

.. automodule:: my_main_package
Run Code Online (Sandbox Code Playgroud)

然后顶级__init__.py包含指令

.. automodule:: some_subpackage
Run Code Online (Sandbox Code Playgroud)

对于每个子包等等.最后,每个模块都包含指令

.. autoclass:: some_class
    :members:
Run Code Online (Sandbox Code Playgroud)

对于模块中的每个类.

这主要是有效的,但我得到的是单页文档,这有点奇怪.

我应该如何组织文档以获取超链接文件树?也就是说,主程序包应该包含自己的文档和每个子包的链接,依此类推,直到每个模块都有自己的页面.

python python-sphinx

11
推荐指数
1
解决办法
7775
查看次数

推迟python中的函数

在JavaScript中,我习惯于能够调用稍后要执行的函数,就像这样

function foo() {
    alert('bar');
}

setTimeout(foo, 1000);
Run Code Online (Sandbox Code Playgroud)

这不会阻止其他代码的执行.

我不知道如何在Python中实现类似的东西.我可以睡觉

import time
def foo():
    print('bar')

time.sleep(1)
foo()
Run Code Online (Sandbox Code Playgroud)

但这会阻止其他代码的执行.(实际上在我的情况下阻塞Python本身并不是问题,但我无法对该方法进行单元测试.)

我知道线程是为不同步执行而设计的,但我想知道是否更容易,类似setTimeoutsetInterval存在.

python multithreading setinterval

10
推荐指数
2
解决办法
8449
查看次数

Python中的原型编程

Javascript为其对象使用基于原型的模型.尽管如此,该语言非常灵活,并且很容易用几行函数编写,这些函数替换了构造上的其他类型.例如,可以创建一个class函数,模拟标准类行为,包括继承或私有成员.或者可以通过编写一个curry函数来模仿功能工具,例如,一个函数将获取一个函数及其一些参数并返回部分应用的函数.

我想知道是否可以反过来模仿更古典语言中的原型方法.特别是我一直在思考是否有可能在Python中模仿原型,但缺乏对匿名函数的支持(比lambdas更常见)让我陷入困境.

是否有可能编写一些函数来模仿基于类的语言中的指标,特别是在Python中?

编辑让我举一个例子,说明如何实现这样的事情(但我真的无法做到这一切).

首先,最接近Javascript对象的东西是Python字典.所以我们可以有简单的对象

foo = {
    'bar': 1,
    'foobar': 2
}
Run Code Online (Sandbox Code Playgroud)

当然我们想要添加方法,只要该方法适合lambda,这就不是问题

foo = {
    'bar': 1,
    'foobar': 2,
    'method': lambda x: x**2
}
Run Code Online (Sandbox Code Playgroud)

所以现在我们可以打电话了

foo['method'](2)
>>> 4
Run Code Online (Sandbox Code Playgroud)

现在,如果我们有任意函数作为方法,我们就可以继续这样做.首先,我们需要内部的功能foo才能访问foo自己; 否则它们只是普通的功能,而不是方法.

我想可以通过应用一个makeObject函数来实现这一点,该函数foo循环遍历foo值,并且每当找到可调用的值时,修改其__call__属性以foo作为其第一个参数传递.

在这个阶段,我们将拥有自立对象,可以在不需要创建类的情况下声明它们.

然后我们需要能够给出foo一个原型,它可以作为makeObject函数的第二个参数传递.该函数应该修改foo.__getattr__foo.__setattr__如下:每当找不到属性时foo,应该搜索它foo.prototype.

因此,我认为我能够实现这一点,期待一件事:我想不出任何方法来声明方法比lambdas更复杂,除了事先声明它们并将它们附加到我的对象.问题是缺乏匿名功能.我在这里问,因为也许一些Python大师可以找到一些聪明的方法来规避这个.

javascript python inheritance prototype prototypal-inheritance

9
推荐指数
2
解决办法
2903
查看次数

用类加入C

免责声明:我是C的完全新手,但我一直在玩它试图模仿一些类的功能.好吧,我知道如果我想这样,我应该学习C++,但请考虑以下一点实验.

Schreiner,在使用ANSI-C的面向对象编程一书中提出了一种使用指针在C中获取面向对象特征的方法.我必须承认我只是浏览了这本书,但我不太喜欢他的方法.基本上,他使用函数指针来安排

func(foo);
Run Code Online (Sandbox Code Playgroud)

实际上导致了呼唤

foo.methods->func();
Run Code Online (Sandbox Code Playgroud)

哪个foo.methods是包含函数指针的结构.在这种方法中我不喜欢的是,foo无论如何必须具有全局功能; 也就是说,方法没有被它们所居住的类命名.我的感觉是这很快就会导致混乱:想想两个对象,foo并且bar都有一个方法func但参数数量不同.

所以我试图找到更符合我口味的东西.第一次尝试是以下(我为了简洁省略了声明)

#include <stdio.h>

//Instances of this struct will be my objects
struct foo {
    //Properties
    int bar;

    //Methods
    void (* print)(struct foo self);
    void (* printSum)(struct foo self, int delta);
};

//Here is the actual implementation of the methods
static void printFoo(struct foo self) {
    printf("This is bar: %d\n", self.bar);
}

static void printSumFoo(struct foo self, int delta) { …
Run Code Online (Sandbox Code Playgroud)

c oop

9
推荐指数
1
解决办法
3647
查看次数

Django在丢失的模板上显示404

我有一个网站,手工编辑一些页面.当缺少其中一个模板时,它只是意味着页面不存在,所以我想显示错误404.

相反,我得到一个例外TemplateDoesNotExist.

有没有办法告诉Django在找不到模板时显示错误404?

django http-status-code-404

9
推荐指数
2
解决办法
3050
查看次数

丰富SparkContext而不会引发序列化问题

我正在尝试使用Spark来处理来自HBase表的数据.此博客文章提供了如何使用NewHadoopAPI从任何Hadoop读取数据的示例InputFormat.

我做了什么

由于我需要多次执行此操作,因此我尝试使用implicits进行丰富SparkContext,以便我可以从HBase中的给定列集中获取RDD.我写了以下帮助:

trait HBaseReadSupport {
  implicit def toHBaseSC(sc: SparkContext) = new HBaseSC(sc)

  implicit def bytes2string(bytes: Array[Byte]) = new String(bytes)
}


final class HBaseSC(sc: SparkContext) extends Serializable {
  def extract[A](data: Map[String, List[String]], result: Result, interpret: Array[Byte] => A) =
    data map { case (cf, columns) =>
      val content = columns map { column =>
        val cell = result.getColumnLatestCell(cf.getBytes, column.getBytes)

        column -> interpret(CellUtil.cloneValue(cell))
      } toMap

      cf -> content
    }

  def makeConf(table: String) = …
Run Code Online (Sandbox Code Playgroud)

hbase scala apache-spark

9
推荐指数
1
解决办法
3384
查看次数

测试和python包结构

我在构建我的python项目时遇到了一些问题.目前它是同一文件夹中的一堆文件.我试着像它一样构造它

proj/
  __init__.py
  foo.py
  ...
  bar/
    __init__.py
    foobar.py
    ...
  tests/
    foo_test.py
    foobar_test.py
    ...
Run Code Online (Sandbox Code Playgroud)

问题是我无法从内部目录导入外部目录中的模块.这对测试尤其烦人.

我已经阅读了关于相关进口的PEP 328和关于主要模块的相对进口的PEP 366.但是这两种方法都要求基础包在我的PYTHONPATH中.确实,我得到以下错误

ValueError:在非包中尝试相对导入.

所以我在测试文件的顶部添加了以下样板代码

import os, sys
sys.path.append(os.path.join(os.getcwd(), os.path.pardir))
Run Code Online (Sandbox Code Playgroud)

我仍然得到同样的错误.什么是正确的方法

  • 构建一个包,完成测试,和
  • 将基目录添加到路径以允许导入?

编辑根据评论中的要求,我添加了一个失败的示例导入(在文件中foo_test.py)

import os, sys
sys.path.append(os.path.join(os.getcwd(), os.path.pardir))
from ..foo import Foo
Run Code Online (Sandbox Code Playgroud)

python package

8
推荐指数
2
解决办法
3529
查看次数