我是编程新手.我现在正在学习Java,有些东西我不太确定,那就是使用私有.为什么程序员将变量设置为私有,然后将write,getter和setter设置为访问它.无论如何,为什么不把所有东西都公之于众.
public class BadOO {
public int size;
public int weight;
...
}
public class ExploitBadOO {
public static void main (String [] args) {
BadOO b = new BadOO();
b.size = -5; // Legal but bad!!
}
}
Run Code Online (Sandbox Code Playgroud)
我发现了一些像这样的代码,我看到评论合法但很糟糕.我不明白为什么,请解释一下.
假设我在Subversion仓库中有两个文件:
workingcopy/
file1.txt
file2.txt
Run Code Online (Sandbox Code Playgroud)
然后我重命名一个SVN外部:
$ mv file1.txt fileA.txt
Run Code Online (Sandbox Code Playgroud)
现在,SVN将file1.txt标记为缺失,fileA.txt为无版本
$ svn st
! file1.txt
? fileA.txt
Run Code Online (Sandbox Code Playgroud)
据SVN所知,我删除file1.txt并创建了一个完全不同的文件fileA.txt,因此它不知道跟踪文件之间的变化.
编辑:这确实有效,我只是不能正确拼写文件名:)
同样,如果删除文件
$ rm file2.txt
$ svn st
! file2.txt
Run Code Online (Sandbox Code Playgroud)
SVN只知道文件丢失,并尝试将其删除不起作用:
$ svn remove file2.txt
svn: 'file2.txt' does not exist
Run Code Online (Sandbox Code Playgroud)
我知道在Mercurial中,--after无论Mercurial在工作副本中看到什么,您都可以在标记之后将文件标记为移动,复制,删除等.
SVN中有类似的技巧吗?
我正在尝试使用SQLAlchemy + Python向我的数据库添加一个项目,但不断收到错误.
我的database_setup.py:
class company(Base):
__tablename__ = 'company'
compID = Column(Integer, primary_key = True)
name = Column(String(80), nullable = False)
class item(Base):
__tablename__ = 'items'
itemID = Column(Integer, primary_key = True)
name = Column(String(80), nullable = False)
category = Column(String(250))
description = Column(String(250))
price = Column(String(8))
compID = Column(Integer, ForeignKey('company.compID'))
company = relationship(company)
Run Code Online (Sandbox Code Playgroud)
将sqlalchemy导入终端后,我定义了一个要插入的项目:
JawboneUP3 = item(
itemID="1",
name="Jawbone UP3",
description="The latest UP!",
category="tracker",
price="$174.99",
company="Jawbone"
)
Run Code Online (Sandbox Code Playgroud)
并绘制一个会话来添加和提交:
session.add(JawboneUP3)
session.commit()
Run Code Online (Sandbox Code Playgroud)
当我提交时,我不断收到此错误:
Traceback (most recent call last):
File "<stdin>", line …Run Code Online (Sandbox Code Playgroud) 我正在浏览MooTools源代码,试图了解它.implement()和.extend()实用程序.
每个的定义指的是这样定义的函数:
var enumerables = true;
for (var i in {toString: 1}) enumerables = null;
if (enumerables) enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor'];
Function.prototype.overloadSetter = function(usePlural){
var self = this;
return function(a, b){
if (a == null) return this;
if (usePlural || typeof a != 'string'){
for (var k in a) self.call(this, k, a[k]);
if (enumerables) for (var i = enumerables.length; i--;){
k = enumerables[i];
if (a.hasOwnProperty(k)) self.call(this, k, a[k]);
}
} else …Run Code Online (Sandbox Code Playgroud) 还在寻找答案.
更改或重新分配到过滤器innerHTML成功重绘元素,但会破坏我的脚本,所以就这样了.
添加其他子节点(包括文本节点)不会强制重绘.删除添加的节点不会强制重绘.
使用ie7.js系列脚本不起作用.
在我正在开发的项目中,我动态生成(使用javascript)过滤器,如下所示:
<div class="filter">
<a ... class="filter_delete_link">Delete</a>
<div class="filter_field">
...
</div>
<div class="filter_compare">
...
</div>
<div class="filter_constraint">
...
</div>
<div class="filter_logic">
...
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我有适用于每个过滤器的CSS(例如):
.filter a.filter_delete_link{
display:block;
height:16px;
background: url('../images/remove_16.gif') no-repeat;
padding-left:20px;
}
Run Code Online (Sandbox Code Playgroud)
但是,它似乎在IE 7中(可能只有6个),这些样式不适用于新的过滤器.
一切都在Firefox/Chrome/IE8中完美运行.
使用IE8开发人员工具,设置为IE7模式,浏览器可以看到新元素,并且可以看到CSS,但只是没有应用CSS.
有没有办法强制IE重新加载样式,或者是否有更好的方法来解决这个问题?
JavaScript :(简化)
var builder = {
...
createNewFilter: function() {
var newFilter = document.createElement('div');
var deleteLink = document.createElement('a');
deleteLink.href = '#';
deleteLink.setAttribute('class','filter_delete_link');
deleteLink.title = 'Delete Condition';
deleteLink.innerHTML = "Delete";
newFilter.appendChild(deleteLink);
var field = document.createElement('div');
field.setAttribute('class','filter_field'); …Run Code Online (Sandbox Code Playgroud) 所以,我总是像这样实现一个单例:
class Singleton {
private static $_instance = null;
public static function getInstance() {
if (self::$_instance === null) self::$_instance = new Singleton();
return self::$_instance;
}
private function __construct() { }
}
Run Code Online (Sandbox Code Playgroud)
但是,它最近让我感到震惊,我也可以使用成员方式的静态变量来实现它:
class Singleton {
public static function getInstance() {
//oops - can't assign expression here!
static $instance = null; // = new Singleton();
if ($instance === null) $instance = new Singleton();
return $instance;
}
private function __construct() { }
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这是更清洁,因为它不会使类混乱,我不需要做任何明确的存在检查,但因为我从来没有在其他任何地方见过这个实现,我想知道:
使用第二个实现比第一个实现有什么问题吗?
对于学校项目,我需要制作一个简单的绘画应用程序,可以绘制线条,椭圆和矩形.
赋值指定我需要每种类型的形状的工具栏按钮和菜单项.
通过制作JToggleButtons工具栏和菜单项中的按钮,我想稍微超越一点JRadioButtonMenuItems.此外,我想要它,以便当您选择其中一个工具栏按钮时,它取消选择其他按钮,选择适当的菜单项,并取消选择其他菜单项.同样用于选择其中一个菜单项.
我知道我可以组的任何AbstractButton一个ButtonGroup,但我不知道这是正确的道路要走,是因为虽然它处理一个按钮的"组"就好了,我不知道它可以处理两个并行组.
如果没有ButtonGroup意味着在6个事件监听器中的每一个中,我将不得不手动取消选择其他按钮,并且每对将调用相同的代码来设置形状类型.
我也可以制作两个ButtonGroup,一个用于菜单,一个用于工具栏,但是我还必须复制形状类型设置代码.
在任何一种情况下,我都冒着菜单设置按钮的风险,该按钮设置了一个设置按钮的菜单项,ad adintum.
解决这个问题的最佳方法是什么?
(能够通过Netbeans GUI设计器解决问题的好处;它更容易)
虽然我来自编程的Web开发方面的纯PHP背景,但我也花了很多时间在桌面上使用C#和C++.
我真的不想引发任何火焰战争,但是:
什么时候应该使用脚本语言而不是编译语言进行网站开发?
(反之亦然)
为了澄清,为了这个问题,我将"脚本语言"定义为PHP,Python或Ruby等解释性语言,并将"编译语言"定义为强类型编译语言,如C#,C++, Java或VB.
基本上,我想要一个简单,简单,单文件的方法来解析具有"高级"功能的INI文件,如部分继承和属性嵌套,如Zend_Config_Ini.
例如:
[foo]
a = 1
b.a = 2
b.b = 3
b.c = 4
c = 5
[bar : foo]
b.b = 17
c = 42
Run Code Online (Sandbox Code Playgroud)
会解析
array(
'foo'=>array(
'a'=>'1',
'b'=>array(
'a'=>'2',
'b'=>'3',
'c'=>'4'
),
'c'=>'5'
),
'bar'=>array(
'a'=>'1',
'b'=>array(
'a'=>'2',
'b'=>'17',
'c'=>'4'
),
'c'=>'42'
)
)
Run Code Online (Sandbox Code Playgroud)
PHP的内置功能parse_ini_file除了简单的部分和简单的键之外,不会处理简单的INI.
我使用的问题Zend_Config_Ini是我必须包含几乎整个Zend_Config子包,并且是超级膨胀和可配置的.
是否有一个小而简单的库可以解析它?
如果没有,是否有一个我没有看到的简单实现?
小而简单,我的意思是像INI文件的sfYaml.
我的(非常缺乏经验)的眼睛,我将不得不通过与一次解析parse_ini_file,然后回来解决继承,然后通过各部分运行和递归扩展键...
更新:由于这似乎是一个流行的问题,我想指出,我有一个简单的类GitHub上实现这个,随时发送引入请求,问题等.
我刚刚通过php手册阅读了未设置的变量.
php手册说 "unset()破坏了指定的变量"
这个def看起来很完美,直到我遇到静态变量...... "如果一个静态变量在函数内部未设置(),unset()仅在函数的其余部分的上下文中销毁变量.以下调用将恢复之前的变量的值."
至少,这个定义对我来说似乎不是一个好的定义,因为"销毁变量"意味着变量不再与该内存位置相关联.
是否还有其他人认为更好的定义是"unset()使变量超出当前范围"?我的意思是,不是指向终生,而是在这里使用单词范围更好?