我是ninject的完全新手
我一直在拉开其他人的代码,发现了几个nInject模块实例 - 从Ninject.Modules.Module派生的类,并且有一个包含大部分代码的加载方法.
通过调用StandardKernel实例的LoadModule方法并将其传递给模块类的实例来调用这些类.
也许我在这里遗漏了一些明显的东西,但是这对于创建一个普通的旧类并调用它的方法,或者使用静态方法的静态类有什么好处呢?
在驻留在包内的模块中,我需要使用在该__init__.py包内定义的函数.我如何在包内的模块中导入包,所以我可以使用该功能?
__init__在模块内导入不会导入包,而是导入一个名为的模块__init__,导致两个具有不同名称的东西副本...
有没有pythonic方式来做到这一点?
我做了一个名为的文件time.hs.它包含一个函数,用于测量另一个函数的执行时间.
有没有办法将time.hs文件导入另一个Haskell脚本?
我想要的东西:
module Main where
import C:\Haskell\time.hs
main = do
putStrLn "Starting..."
time $ print answer
putStrLn "Done."
Run Code Online (Sandbox Code Playgroud)
时间在'time.hs'中定义为:
module time where
Import <necessary modules>
time a = do
start <- getCPUTime
v <- a
end <- getCPUTime
let diff = (fromIntegral (end - start)) / (10^12)
printf "Computation time: %0.3f sec\n" (diff :: Double)
return v
Run Code Online (Sandbox Code Playgroud)
我不知道如何导入或加载单独的.hs文件.time.hs在导入之前是否需要将文件编译到模块中?
我刚刚开始使用node.js,我有一些Python的经验.在Python中,我可以检查__name__变量是否设置为"__main__",如果是,我知道我的脚本是直接运行的.在这种情况下,我可以运行测试代码或直接以其他方式使用模块.
node.js中有类似的东西吗?
我试图importlib.import_module在Python 2.7.2中使用并遇到奇怪的错误.
考虑以下目录结构:
a
|
+ - __init__.py
- b
|
+ - __init__.py
- c.py
a/b/__init__.py 具有以下代码:
import importlib
mod = importlib.import_module("c")
(在实际代码中"c"有一个名字.)
试着import a.b,产生以下错误:
>>> import a.b
Traceback (most recent call last):
File "", line 1, in
File "a/b/__init__.py", line 3, in
mod = importlib.import_module("c")
File "/opt/Python-2.7.2/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named c
我错过了什么?
谢谢!
如何找到已安装的Perl模块的版本?
这是在底部的答案,但我认为它足够重要,住在这里.有了这些建议,我在my中创建了一个函数.bashrc
function perlmodver {
perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
" is installed.\n"' $1
}
Run Code Online (Sandbox Code Playgroud) 我喜欢每个文件都有一个公共类的Java约定,即使有时候有充分的理由将多个公共类放入一个文件中.在我的情况下,我有相同的接口的替代实现.但是如果我将它们放在单独的文件中,我会在import语句中使用冗余名称(或误导模块名称):
import someConverter.SomeConverter
Run Code Online (Sandbox Code Playgroud)
而someConverter将是文件(和模块)名称和SomeConverter类名称.这看起来非常不优雅.要将所有替代类放入一个文件中,将导致更有意义的import语句:
import converters.SomeConverter
Run Code Online (Sandbox Code Playgroud)
但我担心如果将所有相关的类放入单个模块文件中,文件会变得非常大.这里的Python最佳实践是什么?每个文件一个类是不寻常的?
看着一个随机的源文件中的express为框架NodeJS,有我不理解的代码的两行(这行代码是典型的几乎所有文件的NodeJS).
/**
* Expose `Router` constructor.
*/
exports = module.exports = Router;
Run Code Online (Sandbox Code Playgroud)
和
/**
* Expose HTTP methods.
*/
var methods = exports.methods = require('./methods');
Run Code Online (Sandbox Code Playgroud)
我知道第一段代码 允许文件中的其余函数暴露给NodeJS应用程序,但我不明白它是如何工作的,或者行中的代码意味着什么.
做什么
exports和module.exports实际意味着什么?
我相信第二段代码允许文件中的函数访问methods,但同样,它是如何做到的.
基本上,这些神奇的词是什么:module和exports?
有没有办法定义一个"动态"加载RequireJS中其他模块的模块?如果是,优化器(r.js)如何理解如何/何时必须包含模块?
例如,让dynModules一个定义名称/路径对的模块:
define([], function () {
return ['moduleA', 'moduleB']; // Array of module names
});
Run Code Online (Sandbox Code Playgroud)
另一个模块将基于该阵列动态加载模块.这不起作用:
define(['dyn_modules'], function (dynModules) {
for(name in dynModules) {
var module = require(path); // Call RequireJS require
}
// ...
});
Run Code Online (Sandbox Code Playgroud)
... 给我:
未捕获错误:尚未为上下文加载模块名称"moduleA":_.使用require([]) http://requirejs.org/docs/errors.html#notloaded
我可以解决错误,但它不再是"动态的":
define(['dyn_modules', 'moduleA', 'moduleB'], function (dynModules) {
for(name in dynModules) {
var module = require(path); // Call RequireJS require
}
// ...
});
Run Code Online (Sandbox Code Playgroud) 2018年更新:请务必检查所有回复,因为这个问题的答案多年来已经多次改变.在此更新时,Revise.jl答案可能是最佳解决方案.
我有一个文件"/SomeAbsolutePath/ctbTestModule.jl",其内容是:
module ctbTestModule
export f1
f1(x) = x + 1
end
Run Code Online (Sandbox Code Playgroud)
我在一个运行"〜/ .juliarc.jl"的终端中点燃Julia.启动代码包括以下行:
push!(LOAD_PATH, "/SomeAbsolutePath/")
Run Code Online (Sandbox Code Playgroud)
因此我可以立即输入Julia控制台:
using ctbTestModule
Run Code Online (Sandbox Code Playgroud)
加载我的模块.正如预期的f1(1)回报2.现在我突然决定要编辑f1.我在编辑器中打开"/SomeAbsolutePath/ctbTestModule.jl",并将内容更改为:
module ctbTestModule
export f1
f1(x) = x + 2
end
Run Code Online (Sandbox Code Playgroud)
我现在尝试在我的活跃Julia会话中重新加载模块.我试试
using ctbTestModule
Run Code Online (Sandbox Code Playgroud)
但f1(1)仍然返回2.接下来我尝试:
reload("ctbTestModule")
Run Code Online (Sandbox Code Playgroud)
正如这里所建议的,但f1(1)仍然会回归2.最后,我尝试:
include("/SomeAbsolutePath/ctbTestModule.jl")
Run Code Online (Sandbox Code Playgroud)
正如这里所建议的那样,这是不理想的,因为我必须输入完整的绝对路径,因为当前目录可能不是"/ SomeAbsolutePath".我收到的警告信息Warning: replacing module ctbTestModule听起来很有希望,但f1(1)仍然会返回2.
如果我关闭当前的Julia会话,启动一个新会话并输入using ctbTestModule,我现在得到所需的行为,即f1(1)返回3.但显然我想在不 …