我基本上是一个java开发人员.我在红宝石工作了大约一年.与java不同,Ruby是一种纯粹的面向对象的编程语言.这是一个疑问.它是按值传递还是按引用传递?Java作为pass-by-value工作:"当传递基元时,我看到该值被复制并传递给方法.但是如果有对象,则引用被复制并传递给方法.引用包含对象的位置在堆中.在方法调用期间,只传递对象的位置.因此不会创建重复的对象.同样的对象被修改."
但是当我尝试下面的ruby代码片段时,我得到了与Java相同的结果:"在方法调用期间,数字就像一个原语(比如在java中),而数组就像java中一样完美引用".现在,我很困惑.如果ruby中的所有内容都是对象,那么在方法调用期间为什么数字对象会重复?
class A
def meth1(a)
a = a+5
puts "a inside meth1---#{a}"
end
def meth2(array)
array.pop
puts "array inside meth2---#{array}"
end
end
obj1 = A.new
aa=5
obj1.meth1(aa)
puts "aa-----#{aa}"
arr = [3,4,5]
obj1.meth2(arr)
puts "arr---#{arr}"
Run Code Online (Sandbox Code Playgroud)
结果:
一个内部meth1 --- 10
AA ----- 5
数组里面的meth2 --- 34
ARR --- 34
我想向TextView窗口小部件添加左右边距,但这似乎不起作用。
这是我的活动XML:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.sayhi.DisplayOutput"
tools:layout_editor_absoluteY="81dp">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="140dp"
android:text="@string/output"
android:textSize="30sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
看起来是这样的:
我正在使用GUI布局编辑器。我尝试将填充添加到小部件中,并且填充按预期工作。我想我缺少有关布局的一些基本知识,但我不确定是什么。
我正在使用Android Studio 2.3,ConstraintLayout 1.0.2,AppCompat v7:26,构建工具版本26.0.2。
我正在使用 Golang 中的内置html库。这是重现该问题的代码:
package main
import (
"fmt"
"log"
"net/http"
"golang.org/x/net/html"
)
const url = "https://google.com"
func main() {
resp, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
log.Fatalf("Status code error: %d %s", resp.StatusCode, resp.Status)
}
h := html.NewTokenizer(resp.Body)
for {
if h.Next() == html.ErrorToken {
break
}
l := len(h.Token().Attr)
if l != 0 {
fmt.Println("=======")
fmt.Println("Length", l) // greater than 0
fmt.Println("Attr", h.Token().Attr) // empty all the …Run Code Online (Sandbox Code Playgroud) 当我做,
> "fooo".gsub("o") {puts "Found an 'o'"}
Found an 'o'
Found an 'o'
Found an 'o'
=> "f"
Run Code Online (Sandbox Code Playgroud)
gsub删除所有'o's。这是如何运作的?
我认为gsub将每个字符传递给块,但是由于块对字符本身没有任何作用(如捕获),因此将其删除。
我认为是这种情况,因为当我这样做时
> "fooo".gsub("o"){|ch| ch.upcase}
=> "fOOO"
Run Code Online (Sandbox Code Playgroud)
块正在捕获字符并将其变成大写。但是当我这样做时
> "fooo".gsub("o", "u"){|ch| ch.upcase}
=> "fuuu"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Ruby如何处理块?
我发现Ruby将块插入到使用的方法中yield。(选中此选项),但是我仍然不确定我对第一个代码示例和第三个示例的解释。谁能对此进一步说明?