这是我的程序,类使用它被称为Time2我将引用添加到TimeTest我一直得到错误'Time2'是'命名空间'但是像'类型'一样使用
有人可以告诉我这个错误是什么以及如何解决它?
namespace TimeTest
{
class TimeTest
{
static void Main(string[] args)
{
Time2 t1 = new Time2();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个MVVM项目,所以我的项目中有像Models,ViewModels,Windows等文件夹.每当我创建一个新类时,Visual Studio会自动将文件夹名称添加到命名空间名称而不是仅保留项目 - 级别命名空间 因此,向ViewModels文件夹添加一个新类将导致命名空间,MyProject.ViewModels而不仅仅是MyProject.
当我第一次遇到这个时,它让我恼火.我的类名很清楚,有时甚至包含其中的文件夹名称(例如ContactViewModel).我很快发现自己手动删除名称空间上的文件夹名称.我甚至试图创建一个自定义类模板(请参阅此问题),但我无法使其工作,因此继续手动执行.
不过,我开始怀疑,如果这个惯例存在的原因是我没有看到的.如果你出于某种原因将许多相同的类名组织成文件夹,我可以看到它很有用,但这似乎不是特别常见的情况.
问题:
我刚刚通过Composer安装了Sebastian Bergmann的PHPUnit版本3.7.19,并编写了一个我想进行单元测试的课程.
我想让我的所有课程自动加载到每个单元测试中,而不必使用include或require在我的测试的顶部,但这证明是困难的!
这是我的目录结构的样子(尾部/斜杠表示目录,而不是文件):
我的composer.json文件包括以下内容:
"require": {
"phpunit/phpunit": "3.7.*",
"phpunit/phpunit-selenium": ">=1.2"
}
Run Code Online (Sandbox Code Playgroud)
我的returns.php类文件包括以下内容:
<?php
class Returning {
public $var;
function __construct(){
$this->var = 1;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我的returnsTest.php测试文件包括以下内容:
<?php
class ReturningTest extends PHPUnit_Framework_TestCase
{
protected $obj = null;
protected function setUp()
{
$this->obj = new Returning;
}
public function testExample()
{
$this->assertEquals(1, $this->obj->var); …Run Code Online (Sandbox Code Playgroud) 编辑:
请参阅本问题底部的完整答案.
tl;博士回答:Python有静态嵌套的范围.的静态 方面可以与隐变量声明相互作用,产生非显而易见的结果.
(这可能特别令人惊讶,因为语言通常具有动态性质).
我认为我对Python的范围规则有一个很好的处理,但是这个问题让我彻底陷入困境,而且我的google-fu让我失望了(不是我很惊讶 - 看看问题标题;)
我将从一些可以按预期工作的示例开始,但是可以自由地跳到示例4的多汁部分.
例1.
>>> x = 3
>>> class MyClass(object):
... x = x
...
>>> MyClass.x
3
Run Code Online (Sandbox Code Playgroud)
足够简单:在类定义期间,我们能够访问外部(在本例中为全局)范围中定义的变量.
例2.
>>> def mymethod(self):
... return self.x
...
>>> x = 3
>>> class MyClass(object):
... x = x
... mymethod = mymethod
...
>>> MyClass().mymethod()
3
Run Code Online (Sandbox Code Playgroud)
再次(忽略了为什么人们可能想要这样做),这里没有任何意外:我们可以访问外部范围中的函数.
注意:正如Frédéric在下面指出的那样,这个功能似乎不起作用.请参见示例5(及更高版本).
例3.
>>> def myfunc():
... x = 3
... class MyClass(object):
... x = x
... return MyClass
... …Run Code Online (Sandbox Code Playgroud) 我有一个带有默认命名空间的XML文档.我正在使用XPathNavigator使用Xpath选择一组节点,如下所示:
XmlElement myXML = ...;
XPathNavigator navigator = myXML.CreateNavigator();
XPathNodeIterator result = navigator.Select("/outerelement/innerelement");
Run Code Online (Sandbox Code Playgroud)
我没有得到任何结果:我假设这是因为我没有指定命名空间.如何在我的选择中包含命名空间?
Visual Studio不断尝试缩进命名空间内的代码.
例如:
namespace Foo
{
void Bar();
void Bar()
{
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我手动取消缩进,那么它就会保持这种状态.但不幸的是,如果我之前添加一些东西void Bar();- 例如评论 - VS将继续尝试缩进它.
这太烦人了,基本上因为这个原因我几乎从不在C++中使用命名空间.我无法理解为什么它会尝试缩进它们(缩小整个文件的 1个甚至5个标签是什么意思?),或者如何使它停止.
有没有办法阻止这种行为?一个配置选项,一个加载项,一个注册表设置,甚至是一个直接修改devenv.exe的hack.
我正在现有项目中实现名称空间.我发现您可以使用关键字"use"将类导入到命名空间中.我的问题是,我还可以将所有类从1个名称空间导入到另一个名称空间中.例:
namespace foo
{
class bar
{
public static $a = 'foobar';
}
}
namespace
{
use \foo; //This doesn't work!
echo bar::$a;
}
Run Code Online (Sandbox Code Playgroud)
PHP 7+更新
PHP 7中的一个新功能是分组声明.这并不像在给定命名空间中对所有类使用1'use语句'那么容易,但使它更容易......
示例代码:
<?php
// Pre PHP 7 code
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
// PHP 7+ code
use some\namespace\{ClassA, ClassB, ClassC as C};
?>
Run Code Online (Sandbox Code Playgroud)
另见:https://secure.php.net/manual/en/migration70.new-features.php#migration70.new-features.group-use-declarations
我目前正在开发一个基于backbone.js构建的大型Web应用程序,并且在组织,"僵尸"等方面遇到了很多问题.所以我决定做一个主要的代码重构.我已经编写了一堆辅助函数来处理"僵尸"; 但是,我想从一开始就为代码创建一个很好的结构/组织.我没有在大型的backbone.js组织上找到很多很棒的教程/示例,所以我从头开始,想看看我是否可以就我开始的地方得到一些意见.
我显然在全局命名空间中设置了我的代码; 但我也想保持这个命名空间相当干净.我的主要app.js使类文件本身与全局命名空间分开; 您可以使用reg()函数注册一个类(以便可以实例化它),而inst()函数可以从classes数组中实例化一个类.因此,除了3种方法之外,MyApp命名空间只有路由器,模型和视图:
var MyApp = (function () {
var classes = {
Routers: {},
Collections: {},
Models: {},
Views: {}
};
methods = {
init: function () {
MyApp.Router = MyApp.inst('Routers', 'App');
MyApp.Model = MyApp.inst('Models', 'App');
MyApp.View = MyApp.inst('Views', 'App');
Backbone.history.start();
},
reg: function (type, name, C) {
classes[type][name] = C;
},
inst: function (type, C, attrs) {
return new classes[type][C](attrs || {});
}
};
return methods;
}());
$(MyApp.init);
Run Code Online (Sandbox Code Playgroud)
在模型,集合,路由器和视图中,我像往常一样工作,但是然后需要在文件的末尾注册该类,以便可以在以后实例化它(不会使命名空间混乱):
MyApp.reg('Models', 'App', Model);
Run Code Online (Sandbox Code Playgroud)
这似乎是组织代码的不必要的方式吗?其他人是否有更好的例子来说明如何使用许多路由器,集合,模型和视图组织真正的大型项目?
我有一个具有默认命名空间的C#应用程序WindowsFormsApplication1.
我决定使用不同的命名空间,所以我重命名了WindowsFormsApplication1.现在,当我编译时,我收到错误:
找不到为Main方法指定的'WindowsFormsApplication1.Program'.
要重命名命名空间,我在文件中突出显示了命名空间,然后点击F2.
如何解决此问题并在整个项目中更改实际的命名空间?
我正在使用Visual C#2010 Express.
我有这个:
use XXX\Driver\Driver;
...
var_dump(class_exists('Driver')); // false
$driver = new Driver(); // prints 123123123 since I put an echo in the constructor of this class
exit;
Run Code Online (Sandbox Code Playgroud)
嗯......这种行为非常不合理(创建根据PHP不存在的类的对象).有没有办法检查给定名称空间下是否存在类?
namespaces ×10
c# ×4
php ×3
autoload ×1
backbone.js ×1
c++ ×1
class ×1
composer-php ×1
import ×1
indentation ×1
javascript ×1
jquery ×1
oop ×1
organization ×1
phpunit ×1
python ×1
scope ×1
xml ×1
xpath ×1