我有这个代码:
class Foo {
int x = 12;
public static void go(final int x) {
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud)
参数final x和实例x具有相同的名称.如果我想在go()方法中使用它,我将如何引用实例变量x = 12,因为它的名称与参数变量相同?
说我有
class A
end
class B < A
end
p B.superclass.superclass.superclass # => BasicObject
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以指定类似重复运算符的东西,而不是调用.superclass 3次,基本上会说这个方法调用x次?
好的,所以Ruby是'按值传递'.但是,如何在Ruby中精确定义"按引用传递"和"按值传递"?我用过这个答案传递参考值和传递值之间有什么区别?根据它,Ruby似乎是一个混合......
从技术上讲,Ruby似乎是"按值传递",区别在于当您将值传递给方法时该值不会获得COPIED.如果我们定义"value"=对象,并且"reference"=指向该对象的引用变量,那么"通过引用传递"是否有意义,如果它等同于"传递指向特定对象的引用变量"?然后,一旦传递了"引用",该方法就不会对对象进行COPY,而实际上具有可以直接操作的ORIGINAL对象本身(由变量引用).如我错了请纠正我.
编辑:我知道这个问题Ruby是通过引用还是通过值传递?但不同的人似乎对那里的参考/价值有不同的定义.
var a = "foo";
var c = Array.prototype.join.call( a, "-" ); // 'f-o-o'
Run Code Online (Sandbox Code Playgroud)
第二行代码如何工作?我没有看到任何字符串转换为数组然后再转换回来,这是在后台发生的吗?我遇到过这种代码,这很奇怪,一个接受字符串的数组方法.
当我有一些简单的元素漂浮时,如本例所示:http ://jsfiddle.net/2zpqyLt0/
div {
width: 100px;
height: 100px;
}
.element1 {
background: rgb(211, 206, 61);
float: left;
}
.element2 {
background: rgb(85, 66, 54);
float: left;
}
.element3 {
background: rgb(247, 120, 37);
float: left;
}Run Code Online (Sandbox Code Playgroud)
<div class="element1"></div>
<div class="element2"></div>
<div class="element3"></div>Run Code Online (Sandbox Code Playgroud)
它们彼此相邻地堆叠在一起。据我了解,当您“浮动”一个元素时,它就脱离了文档的正常流程。文档正常流中(仍然)的元素不知道该元素存在,因此它们可以与其重叠。但是其他浮动元素呢?看起来他们彼此认识并且处于某种“浮动流”中,否则如果他们不认识,他们就会全部重叠并最终出现在左侧边缘。是否有一个术语来描述这种“浮动类型的流”,其中浮动元素由于某种原因知道它们存在?
class Something
@b = [4432]
def screen
puts @b.class
end
end
s = Something.new
s.screen
Run Code Online (Sandbox Code Playgroud)
输出'Nilclass'.想知道,为什么在类中定义的实例变量总是NilClass的一部分?
假设我有:
Book = Struct.new(:title, :content)
book = Book.new('harry potter', 'a bunch of content here')
p book.title #=> harry potter
Run Code Online (Sandbox Code Playgroud)
我想要的最后一行是"哈利波特".我知道我可以这样做:
Book = Struct.new(:title, :content) do
def capitalized_title
self.title.gsub(/\S+/, &:capitalize)
end
end
Run Code Online (Sandbox Code Playgroud)
然后调用capitalized_title,但我想要的是不必创建一个单独的方法,而是有一些方法当你将"title"分配给一个新的Book对象时,标题会立即大写.我想是某种钩子方法.
假设我在C#中的一个类中有一个委托字段:
public Action TrainsAreComing;
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我可以做到这一点:
TrainsAreComing = FirstSubscriber;
Run Code Online (Sandbox Code Playgroud)
然后:
TrainsAreComing += SecondSubscriber
Run Code Online (Sandbox Code Playgroud)
我已经阅读了一些SO答案,人们说这句话转化为:
TrainsAreComing += (Action)Delegate.Combine(TrainsAreComing, new Action(SecondSubscriber));
Run Code Online (Sandbox Code Playgroud)
我发现这不是真的,因为在这里你实际上是在组合FirstSubscriber + FirstSubscriber + SecondSubscriber,这不是什么TrainsAreComing += SecondMethod(只是将FirstSubscriber与SecondSubscriber结合起来).
那么到底发生了什么在后台,你会怎么写的去加糖的版本TrainsAreComing += SecondMethod使用Delegate.Combine?
假设我有这个:
a = "|hello"
Run Code Online (Sandbox Code Playgroud)
如果我做:
a.split("|") #=> ["", "hello"]
Run Code Online (Sandbox Code Playgroud)
现在说我有:
b = "hello|"
Run Code Online (Sandbox Code Playgroud)
如果我做:
b.split("|") #=> ["hello"]
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我期待结果["hello", ""],类似于第一个例子.这种split方法工作不一致.或者是否有一些我不了解的内在工作?
我需要一个给定数字(例如123)的函数,该函数将输出数组[100,20,3]。我已经尝试过类似的事情(从另一个关于SO的问题中借来的):
function separateNumberIntoUnits(n) {
var arr = [];
var i = 10;
while (n > i / 10)
{
arr.unshift(n % i - n % (i / 10));
i *= 10;
}
return arr;
}
Run Code Online (Sandbox Code Playgroud)
它适用于除10、100等以外的所有数字。我试图弄清楚发生了什么,但是数学不是我的强项...
如果有更有效的方法可以执行此操作,请随时编写自己的解决方案。