小编vad*_*bar的帖子

Ruby是按值传递还是按引用传递?

我基本上是一个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

ruby java oop pass-by-reference pass-by-value

4
推荐指数
3
解决办法
5170
查看次数

使用XML在约束布局中向TextView添加边距

我想向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。

android android-layout android-constraintlayout

4
推荐指数
2
解决办法
1594
查看次数

为什么 x/net/html Token().Attr 上的 len 在这里为空切片返回非零值?

我正在使用 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)

tokenize go slice

4
推荐指数
1
解决办法
221
查看次数

“ String#gsub {}”(带有块)如何工作?

当我做,

> "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。(选中此选项),但是我仍然不确定我对第一个代码示例和第三个示例的解释。谁能对此进一步说明?

ruby string

2
推荐指数
1
解决办法
537
查看次数