比方说son,我有一些对象,我想从另一个对象继承father.
当然我可以为父亲创建一个构造函数
Father = function() {
this.firstProperty = someValue;
this.secondProperty = someOtherValue;
}
Run Code Online (Sandbox Code Playgroud)
然后使用
var son = new Father();
son.thirdProperty = yetAnotherValue;
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的.由于son将具有许多属性,因此将子声明为对象文字将更具可读性.但后来我不知道如何设置它的原型.
做点什么
var father = {
firstProperty: someValue;
secondProperty: someOtherValue;
};
var son = {
thirdProperty: yetAnotherValue
};
son.constructor.prototype = father;
Run Code Online (Sandbox Code Playgroud)
不会起作用,因为原型链似乎是隐藏的而不关心构造函数.prototype的变化.
我想我可以__proto__在Firefox中使用该属性,比如
var father = {
firstProperty: someValue;
secondProperty: someOtherValue;
};
var son = {
thirdProperty: yetAnotherValue
__proto__: father
};
son.constructor.prototype = father;
Run Code Online (Sandbox Code Playgroud)
但是,据我所知,这不是该语言的标准功能,最好不要直接使用它.
有没有办法为对象文字指定原型?
我正在尝试为 Django 应用程序编写一些测试,涉及文件上传。为此,我想MEDIA_ROOT暂时将其更改为“myproject/fixtures/test_media/”。由于某种原因,这似乎阻止了 Django 找到固定装置。
我的测试用例看起来像
from django.conf import settings
class TestMedia(TestCase):
fixtures = ['fixtures/test_data.json']
def setUp(self):
settings.MEDIA_ROOT = ''.join(
[settings.PROJECT_PATH, '/fixtures/test_media/'])
def test_photo_size(self):
pass # Actually do something with the media files
Run Code Online (Sandbox Code Playgroud)
由于某种原因,Django 无法加载固定装置,因此所有测试都会失败
安装固定装置“fixtures/test_data.json”时出现问题:回溯(最近一次调用最后一次)...
我究竟做错了什么?
如果这个问题很简单,我会道歉,但一些谷歌搜索并没有把我带到任何地方.defmulti和的一般语法是defmethod什么?我可以编写简单的多方法,但我不知道在哪里可以放置文档字符串,前置和后置条件,元数据等.
我实际上对ClojureScript比对Clojure更感兴趣,所以如果两者之间存在差异,请告诉我.
我正在尝试了解如何在ClojureScript中建模事件.在JavaScript中设计事件队列很容易.您只需保留一个(可变的)函数数组,并提供辅助函数来添加或删除数组中的回调.当您触发事件时,只需遍历数组中列出的所有回调并一个接一个地调用它们.
这种范式远非功能性风格 - 例如,除非它们有副作用,否则触发回调没有意义.此外,它使用可变数组实现.在我看来,在ClojureScript中,人们需要能够做事件驱动的编程来做任何有用的事情.现在,我知道Google Closure已经实现了一个事件库,但我的问题是关于本地实现它.
由于所有基本的Clojure/ClojureScript数据类型都是不可变的,因此实现这种机制的惯用方法是什么?改变参考?求助于来自主机的可变数据结构(Java resp JavaScript)?
如果我理解正确,代理可能是Clojure中的正确工具,但我发现它们目前尚未在ClojureScript中实现.
尽管看起来微不足道,但我找不到将Grooty中的Unix时间戳转换为Date对象的方法.
让我试试1280512800,应该成为Fri, 30 Jul 2010 18:00:00 GMT
我的第一次尝试是
new Date(1280512800)
// wrong, becomes Thu Jan 15 20:41:52 CET 1970
Run Code Online (Sandbox Code Playgroud)
然后我读到Java时间戳使用毫秒,因此我应该使用
new Date((long)1280512800 * 1000)
// the cast to long is irrelevant in Groovy, in any case I get
// Thu Jan 08 03:09:05 CET 1970
Run Code Online (Sandbox Code Playgroud)
将时间戳转换为日期的正确方法是什么?如果我想指定工作时区怎么办?
我想在Ubuntu 12.04上安装Gradle.起初我在存储库中使用了包,但是在遇到这个 错误后,我发现我最好使用更新的版本.
我已经删除了内置包并通过将官方1.0软件包复制到/usr/local/share/目录并添加了一个软链接/usr/local/bin/gradle/来安装gradle /usr/local/share/gradle-1.0/bin/gradle.
它似乎工作,但我遇到了类路径问题.也就是说,一旦我尝试建立一个项目,我就得到了
Exception executing org.gradle.api.internal.tasks.compile.ApiGroovyCompiler@1ab95774 in compiler daemon: java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileGroovy'.
> org/apache/commons/cli/ParseException
Run Code Online (Sandbox Code Playgroud)
现在locate commons-cli.jar给我
/usr/share/groovy/lib/commons-cli.jar
/usr/share/java/commons-cli.jar
Run Code Online (Sandbox Code Playgroud)
显然这两个JAR不在类路径上.通常我会运行一个Java可执行文件,其中包含-cp向类路径添加内容的选项.但是gradle可执行文件本身是一个脚本,它在调用Java之前自己设置类路径.
安装Gradle并使其在类路径上找到所需的所有内容的正确方法是什么?
请注意,我是JVM世界的新手,所以不要以为我熟悉任何东西:-)
我是Mercurial用户,我对远程分支的行为感到困惑.我有一个远程分支origin/dev,我想在本地分支上复制它dev.我想要的是:
git pull,变化origin/dev被合并到devgit push,变化dev被合并到origin/dev所以我创建了一个跟踪分支
git branch --track dev origin/dev
Run Code Online (Sandbox Code Playgroud)
据我所知,这应该完全符合我的需要.
不过,我正在开发一个功能分支并发布了一个git pull.当我后来发出的时候,git checkout dev我收到了令人费解的消息
您的分支在2个提交后面的'origin/master_dev'后面,可以快进.
所以看来我的本地分支毕竟没有更新.每当我拉动并且我目前不在那个分支时,有没有办法让分支更新到远程分支?如果没有,我是否正确git merge分支开发(没有任何参数)足以恢复情况?
我有一个类及其伴随对象,它们共同具有一些可重用的功能.我已将伴随对象的功能封装成特征,所以现在的情况就像
class Foo {
import Foo._
def foo: Quux = bar(this)
}
trait Bar {
def bar(f: Foo): Quux = frobnicate(f)
}
object Foo extends Bar
Run Code Online (Sandbox Code Playgroud)
既然Foo.foo是一种可重用的方法,我想把它放到它的特性中.
但我必须找到一种方法来告诉类型检查器,虽然bar不是类的方法Foo,但它将在范围内,因为从伴随对象导入.我想我需要能够键入类的伴随对象.
有类似的东西吗?
我对Clojure很陌生,虽然我熟悉函数式语言,主要是Scala.
我想弄清楚在Clojure中对集合进行操作的惯用方法是什么.我特别感到困惑的是函数的行为,比如map.
在Scala中,非常注意制作,以便map始终返回相同类型的原始集合的集合,只要这有意义:
List(1, 2, 3) map (2 *) == List(2, 4, 6)
Set(1, 2, 3) map (2 *) == Set(2, 4, 6)
Vector(1, 2, 3) map (2 *) == Vector(2, 4, 6)
Run Code Online (Sandbox Code Playgroud)
相反,Clojure中,据我了解,大部分的操作,例如map或filter懒惰,甚至当上跃跃欲试的数据结构进行调用.这有着奇怪的结果
(map #(* 2 %) [1 2 3])
Run Code Online (Sandbox Code Playgroud)
懒惰列表而不是矢量.
虽然我更喜欢懒惰的操作,但我发现上述情况令人困惑.实际上,向量保证了列表没有的某些性能特征.
假设我使用上面的结果并追加到它的末尾.如果我理解正确,结果不会被评估,直到我尝试追加它,然后它被评估,我得到一个列表而不是一个向量; 所以我必须遍历它以追加到最后.当然我之后可以将它变成一个矢量,但这会变得混乱而且可以被忽略.
如果我理解正确,map是多态的并且实现它不会是一个问题,因此它返回向量上的向量,列表上的列表,流上的流(这次使用惰性语义)等等.我想我对Clojure及其成语的基本设计缺失了一些东西.
对clojure数据结构的基本操作不会预先反映结构的原因是什么?
clojure ×3
scala ×2
branch ×1
classpath ×1
collections ×1
date ×1
django ×1
events ×1
fixtures ×1
git ×1
gradle ×1
groovy ×1
installation ×1
javascript ×1
multimethod ×1
oop ×1
testing ×1
timestamp ×1
types ×1
ubuntu ×1
ubuntu-12.04 ×1
unit-testing ×1