这之间有什么实际的区别吗?
public class OuterClass {
private class InnerClass {
public InnerClass() {}
}
}
Run Code Online (Sandbox Code Playgroud)
还有这个?
public class OuterClass {
private class InnerClass {
private InnerClass() {}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在展示一个巨大的表格结构与淘汰赛.用户可以通过单击行上的复选框来删除行:
data-bind="checked: row.removed"
Run Code Online (Sandbox Code Playgroud)
问题是必须在单击时重新呈现表,在慢速计算机/浏览器上需要一到两秒 - 复选框在表呈现后更改其状态,因此UI感觉无响应.我想创建一个包装函数,它执行与默认检查绑定相同的操作,但另外显示一个加载器符号 - 然后在检查的绑定完成其工作后再次隐藏它.就像是:
ko.bindingHandlers.checkedWithLoader = {
update: function(element, valueAccessor, allBindings) {
loader.show();
// call knockout's default checked binding here
loader.hide();
}
};
Run Code Online (Sandbox Code Playgroud)
有可能吗?还有更好的选择吗?
我只是试图让我的头脑围绕事件驱动的JS,所以请耐心等待我.我的应用程序中有不同类型的模块.有些只是封装数据,有些则管理DOM的一部分.有些模块依赖于其他模块,有时一个模块依赖于多个其他模块的状态,但我不希望它们直接通信或将一个模块传递给另一个模块以便于访问.我试图创建最简单的场景来说明我的问题(实际的模块当然要复杂得多):
我有一个dataModule只暴露一些数据:
var dataModule = { data: 3 };
Run Code Online (Sandbox Code Playgroud)
有一个configModule公开了用于显示该数据的修饰符:
var configModule = { factor: 2 };
Run Code Online (Sandbox Code Playgroud)
最后有一个displayModule,它结合并呈现来自其他两个模块的数据:
var displayModule = {
display: function(data, factor) {
console.log(data * factor);
}
};
Run Code Online (Sandbox Code Playgroud)
我也有一个简单的pub-sub实现,所以我可以像这样在模块之间进行调解:
pubsub.subscribe("init", function() {
displayModule.display(dataModule.data, configModule.factor);
});
pubsub.publish("init"); // output: 6
Run Code Online (Sandbox Code Playgroud)
然而,这种方式我似乎最终得到了一个必须明确知道所有模块实例的中介 - 有没有办法避免这种情况?如果这些模块有多个实例,我也不知道这是如何工作的.避免全局实例变量的最佳方法是什么?我想我的问题是管理类似的东西最灵活的方法是什么?我是在正确的轨道上,还是这完全错了?很抱歉我的问题不是很准确,我只需要有人帮我推进正确的方向.
这是对另一个问题(重用循环多维数组的代码)的后续跟踪,其中我通过使用命令模式解决了我的特定问题.我的问题是,我有多个方法对二维数组的每个元素执行操作 - 因此有很多重复的代码.而不是像这样的许多方法......
void method() {
for (int i = 0; i < foo.length; i++) {
for (int j = 0; j < foo[i].length; j++) {
// perform specific actions on foo[i][j];
}
}
}
Run Code Online (Sandbox Code Playgroud)
......我这样解决了:
interface Command {
void execute(int i, int j);
}
void forEach(Command c) {
for (int i = 0; i < foo.length; i++) {
for (int j = 0; j < foo[i].length; j++) {
c.execute(i, j);
}
}
}
void method() {
forEach(new …
Run Code Online (Sandbox Code Playgroud) 我想在for循环遍历对象的ArrayList中重新分配变量.但无论我尝试什么,似乎都没有任何效果.基本上我的代码看起来像这样:
for (int i = 0; i < enemies.size(); i++) {
AbstractEnemy enemy = enemies.get(i);
if (enemy.intersects(bullet)) {
enemy.getsHit(bullet.getDamage());
bulletList.remove(bullet);
if (enemy.isDead()) {
// This does not work
enemy = new ExplodingEnemy(enemy.x, enemy.y);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我想对包含 undefined/null 和数字的数组进行排序,以便 undefined/null 值始终排在第一位:
function sorter(a, b) {
if (a == b) return 0;
if (a == undefined) return -1;
if (b == undefined) return 1;
return a - b;
}
Run Code Online (Sandbox Code Playgroud)
但是,当数组包含未定义的值时,它将成为最后一个元素
[-1, 0, 1, undefined, 2, 3].sort(sorter); // [-1, 0, 1, 2, 3, undefined]
Run Code Online (Sandbox Code Playgroud)
如果值为空,它会正确排序
[-1, 0, 1, null, 2, 3].sort(sorter); // [null, -1, 0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?由于 null == undefined,这不应该导致完全相同的顺序吗?
我有一堆这种形式的数组:
var myRows = [
[{idx: 0, val: 90}, {idx: 1, val: 75}, {idx: 2, val: 35}],
[{idx: 0, val: 50}, {idx: 1, val: 17}, {idx: 2, val: 95}],
[{idx: 0, val: 10}, {idx: 1, val: 24}, {idx: 2, val: 80}]
// ...
];
Run Code Online (Sandbox Code Playgroud)
让我们说我想按顺序排序第一行val
,所以它变成:
[{idx: 2, val: 35}, {idx: 1, val: 75}, {idx: 0, val: 90}]
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来对剩余的数组进行排序,以便它们的顺序与idx
排序的第一行的顺序相匹配?
myArrays = [
[{idx: 2, val: 35}, {idx: 1, val: 75}, {idx: 0, val: 90}]
, [{idx: 2, …
Run Code Online (Sandbox Code Playgroud) 有没有比这更方便的初始化对象数组的方法?
SomeClass[] someArray = new SomeClass[100];
//...
for (int i = 0; i < someArray.length; i++) {
someArray[i] = new SomeClass();
}
// ...
Run Code Online (Sandbox Code Playgroud) 我在这里尝试做的就是将文本字段小部件中输入的文本与给定字符串("abc")进行比较,然后将按钮文本设置为"错误传递"或"传递确定".但是,即使输入正确的"密码",按钮文本也始终设置为"错误传递".我究竟做错了什么?
public class FullscreenActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
final Button button = (Button) findViewById(R.id.button);
final EditText textedit = (EditText) findViewById(R.id.textedit);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (textedit.getText().toString() == "abc")
button.setText("pass ok"); // doesn't work
else
button.setText("wrong pass");
}
});
}
...
Run Code Online (Sandbox Code Playgroud) 我使用以下类来模仿PHP中的匿名对象:
class AnonymousObject
{
protected $methods = array();
public function __construct(array $options) {
$this->methods = $options;
}
public function __call($name, $arguments) {
$callable = null;
if (array_key_exists($name, $this->methods))
$callable = $this->methods[$name];
elseif(isset($this->$name))
$callable = $this->$name;
if (!is_callable($callable))
throw new BadMethodCallException("Method {$name} does not exist");
return call_user_func_array($callable, $arguments);
}
}
Run Code Online (Sandbox Code Playgroud)
(https://gist.github.com/Mihailoff/3700483)
现在,只要声明的函数代表它们自己一切正常,但每当我尝试从另一个函数调用这样的函数时......
$anonymous = new AnonymousObject(array(
"foo" => function() { $this->bar(); },
"bar" => function() { }
));
Run Code Online (Sandbox Code Playgroud)
然后我当然得到了 Fatal error: Using $this when not in object context
有没有办法解决这个问题?
我在这里看到这个函数会交换两个数组元素,但我似乎无法弄清楚它是如何工作的。看起来正在进行某种数组解构(?)。我只是不明白原始data
-array 是如何以及为什么被改变的。
有人可以向我解释这是如何工作的吗?
const swap = (a, i, j) => {
[a[i], a[j]] = [a[j], a[i]] // ???
}
const data = [1, 2, 3, 4]
swap(data, 0, 2)
console.log(data)
Run Code Online (Sandbox Code Playgroud)
假设我有一个多维数组作为类的一个成员和许多方法,它循环遍历数组的每个元素然后对它进行操作.代码可能如下所示:
public class Baz {
private Foo[][] fooArray = new Foo[100][100];
public Baz() {
for (int i = 0; i < fooArray.length; i++) {
for (int j = 0; j < fooArray[i].length; j++) {
// Initialize fooArray
}
}
}
public void method1() {
for (int i = 0; i < fooArray.length; i++) {
for (int j = 0; j < fooArray[i].length; j++) {
// Do something with fooArray[i][j]
}
}
}
public void method2() {
for (int i = …
Run Code Online (Sandbox Code Playgroud) 我目前正在使用 HyperappJS (V2) 和 RamdaJS 学习函数式编程。我的第一个项目是一个简单的博客应用程序,用户可以在其中评论帖子或其他评论。评论表示为树结构。
我的状态看起来像这样:
// state.js
export default {
posts: [
{
topic: `Topic A`,
comments: []
},
{
topic: `Topic B`,
comments: [
{
text: `Comment`,
comments: [ /* ... */ ]
}
]
},
{
topic: `Topic C`,
comments: []
}
],
otherstuff: ...
}
Run Code Online (Sandbox Code Playgroud)
当用户想要添加评论时,我将当前树项传递给我的 addComment-action。在那里我将评论添加到引用的项目并返回一个新的状态对象以触发视图更新。
所以,目前我正在这样做并且它工作正常:
// actions.js
import {concat} from 'ramda'
export default {
addComment: (state, args) => {
args.item.comments = concat(
args.item.comments,
[{text: args.text, comments: []}]
)
return {...state}
}
} …
Run Code Online (Sandbox Code Playgroud) java ×6
javascript ×5
arrays ×2
sorting ×2
android ×1
constructor ×1
data-binding ×1
event-driven ×1
events ×1
hyperapp ×1
java-8 ×1
knockout.js ×1
lambda ×1
loops ×1
php ×1
ramda.js ×1
refactoring ×1
rowsorter ×1
swap ×1
tree ×1