小编Jus*_*hms的帖子

ruby中各种变量范围之间的差异

Ruby有5个变量范围:

  1. 局部变量:这些是常规变量,例如x = 25,y = gaurishwhere xy是局部变量.
  2. 实例变量:这些变量@实际变量名称的符号表示.主要用于类,以便类的每个实例/对象具有不同/单独的值.例.@employee.name = 'Alex'
  3. 类变量:用@@变量名前面的符号表示.类变量,我认为具有相同的值accos所有实例/对象.
  4. 全局变量:它们以$符号开头,随处可访问.例$LOAD_PATH
  5. 常数:必须以大写字母开头,但必须按照惯例书写ALL_CAPS.虽然,它是一个常数,但它的值不是常数,可以改变(虽然红宝石会发出警告).从某种意义上说,这也像一个变量.

正如您可能注意到的,上述所有变量都存储某些类型的值,并且可以更改它们的值.但是,每个范围都会有所不同.拥有5种不同类型的可变范围让我感到困惑.主要是,我很难在什么情况下决定,我应该在我的代码中使用特定的范围.所以我脑子里有些问题.请回答:

  1. 我注意到,与实例变量不同,局部变量和类变量对于所有对象/实例保持相同.那么局部变量和类变量有什么区别?
  2. 可以使用局部变量代替类变量吗?或相反亦然.如果是,那么为什么,如果不是,那么为什么不呢?
  3. ruby中的全局变量让我想起global $x了PHP 中的邪恶变量.红宝石中的全局变量也被视为邪恶,因此不应使用.或者,在特定情况下,在ruby中使用全局变量是有意义的吗?
  4. 为什么常量不是常量并允许更改它们的值?根据定义,常数的值应该是不变的吗?否则,我们可以使用另一个变量而不改变它的值.这相当于红宝石中的CONSTANT吗?
  5. 任何页面/资源/链接解释了ruby中5个不同变量范围之间的区别?我想保留一个方便参考.
  6. 在什么用例下,我应该在我的代码中使用特定的变量作用域.因此,人们会解释所有5个案例,这些案例很酷,这是我混淆的主要原因.
  7. public在java中有没有事实上的选择?在大多数用例中哪个是安全的赌注?

感谢您花时间阅读并回答问题

ruby scope

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

动态添加图像到photoswipe

有没有办法在创建后动态地将图像添加到photoswipe库.

情况就是这样.

我从服务器获取图像网址并在图库中显示它们.下载项目时,会将锚点和img元素添加到页面中.我希望能够在同一时间将每个附加到photoswipe画廊.

目前在元素回调中(在图像加载和元素追加之后)我有

 $elements.photoSwipe({ enableMouseWheel: false , enableKeyboard: false });
Run Code Online (Sandbox Code Playgroud)

除了它在自己的画廊中创建每个元素之外,这都有效.有没有办法获得现有画廊的句柄,只是附加到它?

javascript photoswipe

6
推荐指数
1
解决办法
3642
查看次数

如何在 postgresql 中查询枚举的值

您好,我想在 postgresql 中使用枚举作为创建表的替代方法,因为这些值永远不会改变,但我希望能够为应用程序检索这些值,该应用程序可能会检查以防万一,有什么办法查询它来获取值?

postgresql enums

5
推荐指数
2
解决办法
3934
查看次数

VS Code 中这些 yaml.customTags 是从哪里来的

我最近在 vs code 中查看了我的 settings.json 文件,发现了一堆我没有添加的 yaml 自定义标签。当我打开每个工作区时,这些都会被添加到配置中。

我认为这些可能是由最近的 AWS Toolkit 扩展更新添加的,但我完全删除了 AWS Toolkit,它们仍然存在。我无法识别我添加的另一个与 YAML 有关的插件,并且我最近没有添加任何插件。

这是列表。

"yaml.customTags": [
    "!And",
    "!And sequence",
    "!If",
    "!If sequence",
    "!Not",
    "!Not sequence",
    "!Equals",
    "!Equals sequence",
    "!Or",
    "!Or sequence",
    "!FindInMap",
    "!FindInMap sequence",
    "!Base64",
    "!Join",
    "!Join sequence",
    "!Cidr",
    "!Ref",
    "!Sub",
    "!Sub sequence",
    "!GetAtt",
    "!GetAZs",
    "!ImportValue",
    "!ImportValue sequence",
    "!Select",
    "!Select sequence",
    "!Split",
    "!Split sequence"
]
Run Code Online (Sandbox Code Playgroud)

visual-studio-code

5
推荐指数
1
解决办法
4832
查看次数

如何在 Mac 上的 Dropbox 中递归忽略 node_modules

我想将所有节点项目保存在 Dropbox 中,但我想排除所有node_modules目录同步到 Dropbox。

我曾经通过将这些目录符号链接到不同的位置来实现这一点,但最近版本的 npm 不允许npm_modules成为符号链接,从而破坏了执行此操作的能力。

dropbox node.js npm

5
推荐指数
1
解决办法
1411
查看次数

如何避免在包和结构名称中出现口吃?

我最近做了一些编程,在尝试遵循Effective Go风格指南的同时,我有时发现在命名包和接口以及结构时很难避免出现问题.

举个例子.
我可能有一个带有Console.go文件的控制台包,其中包含Console接口,控制台结构和New函数.

//console/Console.go
package console

type Console interface {
   Print(s String)
}

type console struct {
  ....
}

func (c *console) Print(s String){
  ....
}

func New() Console{
   return &console{}
}
Run Code Online (Sandbox Code Playgroud)

现在,当我在某个地方使用它时,我最终console.Console到处都使用了一种类型.

当我在一个包中有两个或更多结构时,我最终会像这样的东西 con := console.NewConsole()

我不介意有大多数扁平的包结构,但我喜欢尽可能地保持我的代码组织.我对IO.Reader和IO.Writer的想法很好,但是当包与事物相同但仍然需要分开时该怎么办. (是的我知道给定的例子可能是Console.Writer,但让我们假装它完全不同)

所以我的问题是:这种口吃效应是否应该让我担心?(即它是不好的形式?)有没有人有任何避免它的提示?

go

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

有没有办法子类化和覆盖自定义命名空间中的方法?

假设我有一个类,在除了public,protected或internal之外的命名空间中定义了一个方法...

package com.foo.bar
{
   import com.foo.my_name_space
   public class bar
   {
    private var _vabc:String
    private var _v123:String

    protected function set123(val:String):void{
        _v123 = val;
    }

    my_name_space function setABC(val:String):void{
        _vabc = val;
    }

   }
}
Run Code Online (Sandbox Code Playgroud)

现在我想在子类中扩展和覆盖它...

package com.foo
{
   import com.foo.bar.bar
   import com.foo.my_name_space

   public class foo extends bar
   {
      override protected function set123(val:String):void{
        super.set123(val);
      }

       .... ????? ...

   }
 }
Run Code Online (Sandbox Code Playgroud)

很容易覆盖受保护的,公共等方法,但有没有办法覆盖名称空间*my_name_space*中定义的setABC方法?

我尝试了以下语法,它似乎通过FlashBuilder预编译器检查但不起作用.

    use namespace my_name_space override function my_name_space::setABC(val:String):void
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多其他语法组合,但大多数甚至都不会通过预编译检查.(很多都有某种类型的命名空间错误)我有一种感觉这是不可能的,但想知道是否有人可能有任何想法?

flash actionscript flex3 actionscript-3 flex4

3
推荐指数
1
解决办法
1754
查看次数