我想sbt update在我的源代码中调用,以更新多个sbt项目.在shell中这很容易:
cd /path/to/project && sbt update
Run Code Online (Sandbox Code Playgroud)
但是,如果我scala.sys.process在我的代码中使用它,它将不记得cd因此sbt在错误的目录中调用.像这样的代码:
import scala.sys.process._
("cd /path/to/project" #&& "sbt update").!!
Run Code Online (Sandbox Code Playgroud)
我没有在文档中找到通过控制台设置sbt的项目路径的任何可能性.如果像这样的东西工作会很好:
"sbt -projectPath /path/to/project update".!!
Run Code Online (Sandbox Code Playgroud)
如果这样的事情是可能的,这将为我节省很多麻烦!(特别是它在UNIX和Windows上运行.)
我们建立了一个依赖于其他库的库.但是有必要(例如,对于服务器批处理)和可选的依赖性(例如,对于具有GUI的客户端).
这样的事情是可能的:
pip install mylib.tar.gz # automatically downloads and installs with the minimal set of dependencies
pip install mylib.tar.gz --install-option="complete" # automatically installs with all dependencies
Run Code Online (Sandbox Code Playgroud)
我找到了extra_require旗帜,但我怎么能告诉pip他们使用它们?该setup.py如下所示:
from setuptools import setup
# ...
# Hard library depencencies:
requires = [
"numpy>=1.4.1",
"scipy>=0.7.2",
"traits>=3.4.0"
]
# Soft library dependencies:
recommended = {
"mpl": ["matplotlib>=0.99.3"],
"bn": ["bottleneck>=0.6"]
}
# ...
# Installer parameters:
setup(
name = "mylib",
#...
install_requires = requires,
extras_require = recommended
)
Run Code Online (Sandbox Code Playgroud) 我可以命名这样的对象,但不能调用m:
object + {
def m (s: String) = println(s)
}
Run Code Online (Sandbox Code Playgroud)
不能打电话+.m("hi"):
<console>:1: error: illegal start of simple expression
+.m("hi")
Run Code Online (Sandbox Code Playgroud)
也无法呼叫+ m "hi"(首选DSL使用).
但object ++它工作正常!它们与(不存在)unary_+方法冲突吗?有可能避免这种情况吗?
我想知道如何实现scala.xml库,Elem从XML中获取-instance.
所以我可以写:
val xml = {
<myxml>
Some wired text withoud "'s or code like
import x
x.func()
It's like a normal sting in triple-quotes.
</myxml>
}
xml.text
String =
"
Some text wired withoud "'s or code like
import x
x.func()
It's like a normal sting in triple-quotes.
"
Run Code Online (Sandbox Code Playgroud)
看一下源代码并没有给我一些见解,这是如何实现的."XML检测"是一种(硬)scala语言功能还是内部DSL?因为我想建立我自己的东西:
var x = LatexCode {
\sqrt{\frac{a}{b}}
}
x.toString
"\sqrt{\frac{a}{b}}"
Run Code Online (Sandbox Code Playgroud)
要么
var y = PythonCode {
>>> import something
>>> something.func()
}
y.toString
"""import something ...""" …Run Code Online (Sandbox Code Playgroud) 我有一些像这样的代码:
def foo (s: => Any) = println(s)
Run Code Online (Sandbox Code Playgroud)
但是当我想将它转换为具有可变长度的参数列表时,它将不再编译(在Scala 2.10.0-RC2上测试):
def foo (s: => Any*) = println(s)
Run Code Online (Sandbox Code Playgroud)
我必须写什么,它是这样的?
我目前正在尝试使用Actor-concurreny(在Python上),因为我想了解更多相关信息.因此我选择了pykka,但是当我测试它时,它比正常功能慢一半.
该守则只是看它是否有效; 它并不意味着优雅.:)
也许我做错了什么?
from pykka.actor import ThreadingActor
import numpy as np
class Adder(ThreadingActor):
def add_one(self, i):
l = []
for j in i:
l.append(j+1)
return l
if __name__ == '__main__':
data = np.random.random(1000000)
adder = Adder.start().proxy()
adder.add_one(data)
adder.stop()
Run Code Online (Sandbox Code Playgroud)
这不会那么快:
time python actor.py
real 0m8.319s
user 0m8.185s
sys 0m0.140s
Run Code Online (Sandbox Code Playgroud)
而现在虚拟'正常'功能:
def foo(i):
l = []
for j in i:
l.append(j+1)
return l
if __name__ == '__main__':
data = np.random.random(1000000)
foo(data)
Run Code Online (Sandbox Code Playgroud)
给出这个结果:
real 0m3.665s
user 0m3.348s
sys …Run Code Online (Sandbox Code Playgroud) 我正在使用Scala,我想扩展一个具有特征的(单例)对象,它提供了一个数据结构和一些方法,如下所示:
trait Tray[T] {
val tray = ListBuffer.empty[T]
def add[T] (t: T) = tray += t
def get[T]: List[T] = tray.toList
}
Run Code Online (Sandbox Code Playgroud)
然后我想将特征混合到一个对象中,如下所示:
object Test with Tray[Int]
Run Code Online (Sandbox Code Playgroud)
但是在add和中存在类型不匹配get:
Test.add(1)
// ...
Run Code Online (Sandbox Code Playgroud)
我怎么能让这个工作?或者我的错误是什么?
我们创建了一个大量使用(带继承)numpy的MaskedArrays的库.但是我想在make doctest不测试numpy的继承方法的情况下运行sphinx ,因为它们会导致大约100次失败.
这看起来像这样:
class _frommethod:
"""
Adapted from numpy.ma._frommethod
"""
def __init__(self, func_name):
self.__name__ = func_name
self.__doc__ = getattr(MaskedArray, func_name).__doc__
self.obj = None
def __get__(self, obj, objtype=None):
self.obj = obj
return self
def __call__(self, a, *args, **params):
# Get the method from the array (if possible)
method_name = self.__name__
method = getattr(a, method_name, None)
if method is not None:
return method(*args, **params)
# Still here ? Then a is not a MaskedArray
method = getattr(MaskedTimeData, method_name, None) …Run Code Online (Sandbox Code Playgroud) 是否可以使用python装饰器"停用"函数?这是一个例子:
cond = False
class C:
if cond:
def x(self): print "hi"
def y(self): print "ho"
Run Code Online (Sandbox Code Playgroud)
有可能用装饰器重写这段代码吗?
class C:
@cond
def x(self): print "hi"
def y(self): print "ho"
Run Code Online (Sandbox Code Playgroud)
背景:在我们的库中有一些依赖项(如matplotlib)是可选的,这些只需要几个函数(用于debug或fronted).这意味着在某些系统上matplotlib不安装在其他系统上,但两者都应该运行(核心)代码.因此,如果未安装matplotlib,我想禁用某些功能.有这么优雅的方式吗?
我已经用python构建了一些内部DSL。我正在使用assertvor验证。如果最终用户键入了错误的参数,则dsl应该报告错误之处。此刻看起来像这样:
Traceback (most recent call last):
File "tests/maskedtimefilter_test/FilterDSL_test.py", line 63, in test_dsl_validation
input(0): self.regular
File "/Users/sh/reetz/pythonpath/maskedtimedata/maskedtimefilter.py", line 885, in __lshift__
kwargs = self.dsl_validation(kwargs)
File "/Users/sh/reetz/pythonpath/maskedtimedata/maskedtimefilter.py", line 1483, in dsl_validation
check_if_valid(parameter)
File "/Users/sh/reetz/pythonpath/maskedtimedata/dsl.py", line 47, in kernel_a
def kernel_a (x): assert isinstance(x, (list, tuple, np.ndarray)), "kernel must be a list."
AssertionError: kernel must be a list.
Run Code Online (Sandbox Code Playgroud)
但是最终用户是工程师,而不是计算机科学家。因此,使用最小的Traceback很方便。是否可以像这样将Traceback缩小到基本信息(故障在哪里,是什么原因)?:
Traceback (most recent call last):
File "tests/maskedtimefilter_test/FilterDSL_test.py", line 63, in test_dsl_validation
input(0): self.regular
AssertionError: kernel must be a list. …Run Code Online (Sandbox Code Playgroud)