给定某些键,我想从散列中获取一个值数组(按照我给出键的顺序).我这样做了:
class Hash
def values_for_keys(*keys_requested)
result = []
keys_requested.each do |key|
result << self[key]
end
return result
end
end
Run Code Online (Sandbox Code Playgroud)
我修改了这个Hash类,因为我计划在我的代码中几乎无处不在地使用它.
但我真的不喜欢修改核心类的想法.是否有内置解决方案?(找不到任何东西,所以我不得不写这个).
class Object
alias :old_initialize :initialize
def initialize
old_initialize
print "AN OBJECT WAS CREATED"
end
end
class Test
end
test = Test.new
Run Code Online (Sandbox Code Playgroud)
这按预期工作,打印"AN OBJECT WAS CREATED".
但是,如果你使用一个核心类一样Array,Hash或者String,没有任何反应:
array = Array.new
hash = Hash.new
string = String.new
Run Code Online (Sandbox Code Playgroud)
这是为什么?我原以为它们都是子类化的Object,所以对它的任何改变都会起作用.但显然它只适用于我的自定义类.
为了让它更加混乱,我意识到正如警告所说,我的修改应该创建一个无限循环,因为"AN OBJECT WAS CREATED"基本上是创建一个新String实例 - 但是没有循环发生.现在我更加困惑.
Ruby 1.8.7
我有一个类Parent和一个类Child(它是子类的子类Parent).
Parent有一个叫做的方法aaaa.Child有一个叫做的方法bbbb.这就是我想要实现的目标:
bbbb成为一个延伸aaaa.如果我调用aaaa一个Child对象,它将运行aaaa通常会执行的操作,以及其他内容bbbb.bbbb将执行与上面相同的操作(运行aaaa通常会执行的操作,然后执行其他操作bbbb).这就是我最终做的事情:
class Parent
def aaaa
print "A"
end
end
class Child < Parent
alias_method :original_aaaa,:aaaa
def bbbb
original_aaaa
print "B"
end
alias_method :aaaa,:bbbb
end
c = Child.new
c.aaaa # => AB
c.bbbb # => AB
Run Code Online (Sandbox Code Playgroud)
它有效.我猜.但它感到非常hackish.另外,这样做的一个缺点是,如果我想aaaa在定义之前或之后使用相同的名称进行扩展,那么 …
我看到一种方法在Apple的文档中说" A在iOS 7.0中弃用了Method ,而不是使用B".
我认为我把事情搞混了,所以要明确:
如果我识别用户的iOS版本(5.0),我应该使用A或B?因为它是5.0,A应该是可用的,而B可能不是因为它是后来实现的,对吧?
或者我使用SDK 7.0的事实是否意味着我应该总是使用B,无论用户的iOS版本如何?
我正在玩JavaFX.在Scene Builder中,当Eclipse运行时,它看起来像这样:

什么时候,我把它作为Runnable Jar出口.把它放在我的桌面上,这就是我得到的:

为什么?
我在Mac OSX上,使用Java 7.
这是代码:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.collections.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
<children>
<TabPane prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE">
<tabs>
<Tab text="Untitled Tab 1">
<content>
<AnchorPane id="Content" minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<Button layoutX="103.0" layoutY="65.0" mnemonicParsing="false" text="Button" />
<Button layoutX="103.0" layoutY="110.0" mnemonicParsing="false" prefHeight="37.0" prefWidth="121.0" text="Button" />
<CheckBox layoutX="103.0" layoutY="166.0" mnemonicParsing="false" text="CheckBox" />
<ChoiceBox layoutX="103.0" layoutY="201.0">
<items>
<FXCollections fx:factory="observableArrayList">
<String fx:value="Item 1" …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个类Coordinates,它只包含一些x和y整数.我想用它作为一个关键HashMap.
但是,我注意到当您Coordinates使用相同x和y值创建两个不同的实例时,它们将被哈希映射用作不同的键.也就是说,即使它们都具有相同的坐标,您也可以输入两个条目.
我有覆盖equals():
public boolean equals(Object obj) {
if (!(obj instanceof Coord)) {
return false;
}else if (obj == this) {
return true;
}
Coord other = (Coord)obj;
return (x == other.x && y == other.y);
}
Run Code Online (Sandbox Code Playgroud)
但HashMap仍然使用两个实例,就好像它们是不同的键.我该怎么办?
我知道我可以使用两个元素的整数数组.但我想用这个课.
我下载了Ace编辑器并将其放在本地计算机中。我正在使用JavaFX使用进行加载WebView。一切都非常好,但是如何检索书面代码?(对于Java String)
我有一个TextField,如果用户单击不是其本身的任何位置,我想做些事情TextField。
onMouseClicked如果您不单击节点本身,则事件不会触发,因此将无法正常工作。focusedProperty可能是一个好主意,但问题是我的应用程序几乎整个都无法遍历焦点,因此在许多情况下,在文本字段之外单击不会使焦点不集中,因此不会通知侦听器。我唯一想做的就是在事件本身上放置一个事件过滤器,拦截鼠标单击,获取单击坐标并确定它们是否在文本框的范围内。我发现这有点矫kill过正,我可能会缺少一些显而易见的东西。
还有另一种方法来确定用户是否单击了我TextField节点之外的任何地方?
我在我的Cocos2d游戏中使用GameKitHelper.在某些时候,我会想要显示排行榜,所以我这样做:
[[GameKitHelper sharedGameKitHelper] showLeaderboard];
Run Code Online (Sandbox Code Playgroud)
但没有任何反应.我该怎么办?
java ×4
javafx ×3
ruby ×3
ace-editor ×1
class ×1
gamekit ×1
hash ×1
hashmap ×1
inheritance ×1
ios ×1
objective-c ×1
string ×1
vb.net ×1
webview ×1