在进行提前编译时,是否可以在多个源文件上拆分Clojure命名空间:gen-class?怎么做(:main true)和(defn- ...)发挥?
我一直在努力学习更多关于C#语言的知识,但是我还没有看到一个人会使用命名空间别名的情况.
using someOtherName = System.Timers.Timer;
Run Code Online (Sandbox Code Playgroud)
在我看来,它只会增加对理解语言的困惑.有人可以解释一下.
谢谢
我在Python脚本中遇到了一些导入模块的问题.我将尽我所能来描述错误,为什么我遇到它,以及为什么我要用这种特殊的方法来解决我的问题(我将在一秒钟内描述):
假设我有一个模块,我在其中定义了一些实用函数/类,它们引用了将在其中导入此辅助模块的命名空间中定义的实体(让"a"成为这样的实体):
模块1:
def f():
print a
Run Code Online (Sandbox Code Playgroud)
然后我有主程序,其中定义了"a",我想导入这些实用程序:
import module1
a=3
module1.f()
Run Code Online (Sandbox Code Playgroud)
执行程序将触发以下错误:
Traceback (most recent call last):
File "Z:\Python\main.py", line 10, in <module>
module1.f()
File "Z:\Python\module1.py", line 3, in f
print a
NameError: global name 'a' is not defined
Run Code Online (Sandbox Code Playgroud)
过去(两天前,呃)已经提出了类似的问题,并提出了几种解决方案,但我并不认为这些问题符合我的要求.这是我的特定背景:
我正在尝试创建一个连接到MySQL数据库服务器并使用GUI显示/修改数据的Python程序.为清洁起见,我在一个单独的文件中定义了一堆辅助/实用的MySQL相关函数.但是它们都有一个公共变量,我最初在实用程序模块中定义了它,它是MySQLdb模块中的游标对象.后来我意识到应该在主模块中定义游标对象(用于与数据库服务器通信),这样主模块和导入其中的任何东西都可以访问该对象.
最终结果将是这样的:
utilities_module.py:
def utility_1(args):
code which references a variable named "cur"
def utility_n(args):
etcetera
Run Code Online (Sandbox Code Playgroud)
我的主要模块:
program.py:
import MySQLdb, Tkinter
db=MySQLdb.connect(#blahblah) ; cur=db.cursor() #cur is defined!
from …Run Code Online (Sandbox Code Playgroud) 我想在我自己编写%>%的magrittr包中使用包中引入的管道运算符来链接dplyr数据转换.magrittr列Import在DESCRIPTION文件中.加载我自己的包并测试使用管道操作符的函数后,我收到以下错误消息:
functionname中的错误(参数,:找不到函数"%>%"
更改%>%为magrittr::%>%函数源代码也无济于事,因为无法再构建包.
如何调用另一个文件中abc.R文件中定义的功能,说xyz.R?
甲补充问题是,如何调用从R提示/命令行中abc.R定义的函数?
C++标准中的$ 7.3.1.1/2节描述如下:
在声明命名空间作用域中的对象时,不推荐使用static关键字; unnamed-namespace提供了一个更好的选择.
我不明白为什么一个未命名的命名空间被认为是一个更好的选择?理由是什么?我已经知道标准的内容很长一段时间,但我从未认真考虑过,即使我回答这个问题:未命名的命名空间优于静态?
它是否被认为是优越的,因为它也可以应用于用户定义的类型,正如我在回答中所描述的那样?还是有其他原因,我不知道?我问这个问题,特别是因为这是我在答案中的推理,而标准可能会考虑其他因素.
我从C++切换到Java和C#,并认为命名空间/包的使用在那里(结构良好)更好.然后我回到C++并试图以相同的方式使用命名空间,但在头文件中所需的语法是可怕的.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
Run Code Online (Sandbox Code Playgroud)
以下内容对我来说也很奇怪(避免深度缩进):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
Run Code Online (Sandbox Code Playgroud)
是否有更短的方式来表达上述事情?我错过了类似的东西
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
Run Code Online (Sandbox Code Playgroud)
更新
好吧,有人说Java/C#和C++中的使用概念是不同的.真?我认为(动态)类加载不是命名空间的唯一目的(这是一个非常技术性的推理视角).为什么我不应该将它用于可读性和结构化,例如想到"IntelliSense".
目前,命名空间与您可以在其中找到的内容之间没有逻辑/粘合剂.Java和C#做得更好......为什么要包含<iostream>和拥有命名空间std?好吧,如果你说的逻辑应该依靠头部以包括,为什么#包括不使用的"智能感知"友好的语法像#include <std::io::stream>或<std/io/stream>?我认为与Java/C#相比,缺省库中缺少的结构化是C++的一个弱点.
如果狂热冲突的唯一性是一个Point(这也是C#和Java的一个点),一个好主意是使用项目名称或公司名称作为命名空间,你不这么认为吗?
一方面它说C++是最灵活的...但每个人都说"不要这样做"?在我看来,C++可以做很多事情,但是在很多情况下,与C#相比,即使是最简单的事情也会有一种可怕的语法.
更新2
大多数用户认为创建比两个级别更深的嵌套是无稽之谈.好的,那么Win8开发中的Windows :: UI :: Xaml和Windows :: UI :: Xaml :: Controls :: Primitives名称空间呢?我认为微软对名称空间的使用是有道理的,它确实比仅仅2级更深.我认为更大的库/项目需要更深层次的嵌套(我讨厌像ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace这样的类名...那么你也可以将所有东西放到全局命名空间中.)
更新3 - …
我正在组织一个库项目,我有一个名为的中央管理器类,Scenegraph以及生活在Scenegraph命名空间中的一大堆其他类.
我真的很想对场景图是MyLib.Scenegraph和其他类为MyLib.Scenegraph.*,但似乎这样做将是使所有其他类的内部类的唯一途径Scenegraph在Scenegraph.cs文件,这只是太笨拙.
相反,我已经将它组织为,Mylib.Scenegraph.Scenegraph并且MyLib.Scenegraph.*,哪种工作,但我发现Visual Studio在某些条件下会混淆我是否指的是类或命名空间.
有没有一种很好的方法来组织这个软件包,这样对于用户来说很方便,而不会在一个难以维护的混乱中将我的所有代码组合在一起?
我的C#WinForms解决方案有两个项目.一个DLL,它是我正在研究的主要项目,以及一个可执行的WinForms,我称之为"Sandbox",这样我就可以一次性轻松地编译/运行/调试DLL.
我在两个项目的.Net 4.0工作.
一切都工作正常,直到我添加了一些看似无辜的代码,并在DLL中引用了System.Web.现在我的Sandbox项目无法看到DLL项目的命名空间.我没有改变任何我认为应该影响这个的东西.
如果我从Sandbox引用中删除了对DLL的项目引用并重新添加它,那么红色下划线全部消失,颜色编码将返回给我所有的类等; 但是当我尝试构建解决方案时,整个事情再次崩溃.
当我右键单击Sandbox的引用中的DLL项目并在对象浏览器中查看时,我可以看到命名空间和所有内容.
我觉得这可能是某种错误?
这是某种VS2010的错误吗?几个月前我遇到了同样的问题,我当时只能通过制作一个全新的项目并重新导入我的文件来修复它.但是,这一次,我有一个bajillion文件,只会作为最后的手段!
编辑:经过惊慌失措并撤消所有我的更改后,试图找到导致问题的原因,似乎是这一行:
string url = "http://maps.google.com?q=" + HttpUtility.UrlEncode(address);
Run Code Online (Sandbox Code Playgroud)
如果我注释掉这一行,那么我没有命名空间错误,项目构建正常.虽然我看不出这条线有什么不妥.
对于大多数语言来说,拥有名称空间似乎是明智之举.但据我所知,ANSI C不支持它.为什么不?有计划将其纳入未来的标准吗?
namespaces ×10
c# ×3
c++ ×2
r ×2
ansi-c ×1
c ×1
class ×1
clojure ×1
compilation ×1
file ×1
iso ×1
magrittr ×1
mysql-python ×1
python ×1
python-2.6 ×1
scope ×1
standards ×1
syntax ×1
winforms ×1