标签: instance-variables

Ruby的attr_accessor如何生成类变量或类实例变量而不是实例变量?

如果我有一个带有a的类attr_accessor,则默认创建一个实例变量以及相应的getter和setter.但是,有没有办法让它来创建一个类变量或类实例变量而不是创建一个实例变量?

ruby instance-variables class-variables class-instance-variables

29
推荐指数
2
解决办法
3万
查看次数

为什么实例字段不需要是 final 或有效 final 才能在 lambda 表达式中使用?

我正在用 Java 练习 lambda 表达式。根据 Java SE 16 Lambda Body的 Oracle 文档,我知道局部变量需要是 final 或有效 final 的:

任何使用但未在 lambda 表达式中声明的局部变量、形式参数或异常参数必须是 final 或有效 final (§4.12.4),如 §6.5.6.1 中所述。

但它没有说为什么。搜索我发现了这个类似的问题为什么 lambdas 中的变量必须是最终的或有效的最终?,其中 StackOverflow 用户“snr”回复了下一个引用:

到目前为止,Java 中的局部变量不受竞争条件和可见性问题的影响,因为它们只能被执行声明它们的方法的线程访问。但是一个 lambda 可以从创建它的线程传递到另一个线程,因此如果由第二个线程评估的 lambda 被赋予改变局部变量的能力,那么这种免疫力就会丧失。

这就是我的理解:一个方法一次只能由一个线程(比如说 thread_1)执行。这确保该特定方法的局部变量仅由 thread_1 修改。另一方面,可以将 lambda 传递给不同的线程 (thread_2),因此...如果 thread_1 完成 lambda 表达式并继续执行方法的其余部分,则它可能会更改局部变量的值,并且,在同时,thread_2 可能会更改 lambda 表达式中的相同变量。然后,这就是存在此限制的原因(局部变量需要是 final 或有效 final 的)。

对不起,很长的解释。我做对了吗?

但接下来的问题是:

  • 为什么这种情况不适用于实例变量?
  • 如果 thread_1 与 thread_2 同时更改实例变量会发生什么(即使它们没有执行 lambda 表达式)?
  • 实例变量是否以另一种方式保护?

我对Java没有太多经验。对不起,如果我的问题有明显的答案。

java lambda instance-variables local-variables

29
推荐指数
3
解决办法
2653
查看次数

面向对象的Perl构造函数语法和命名参数

我对Perl构造函数中发生的事情感到有点困惑.我发现这两个例子是perldoc perlbot.

package Foo;

#In Perl, the constructor is just a subroutine called new.
sub new {
  #I don't get what this line does at all, but I always see it. Do I need it?
  my $type = shift;

  #I'm turning the array of inputs into a hash, called parameters.
  my %params = @_;

  #I'm making a new hash called $self to store my instance variables?
  my $self = {};

  #I'm adding two values to the instance variables …
Run Code Online (Sandbox Code Playgroud)

oop perl constructor instance-variables

27
推荐指数
6
解决办法
2万
查看次数

如何从Ruby on Rails中的字符串值创建变量名?

我想在控件中创建一个实例变量,以便在视图中使用:

foo = "bar"
instance_variable_set("#{foo}", "cornholio")
Run Code Online (Sandbox Code Playgroud)

在视图中,使用@bar以便:

@bar => "cornholio"
Run Code Online (Sandbox Code Playgroud)

这会产生错误: 'bar' is not allowed as an instance variable name

在Rails中工作3.1

ruby instance-variables

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

为什么实例变量在块内部看似消失?

伙计们,请原谅我.对于Ruby来说,我充其量只是一个新手.我只是想知道对我来说看起来很奇怪的行为的解释.

我正在使用Savon库与我的Ruby应用程序中的SOAP服务进行交互.我注意到以下代码(在我编写的用于处理此交互的类中)似乎传递空值,我希望成员字段的值可以去:

create_session_response = client.request "createSession" do
  soap.body = {
    :user => @user, # This ends up being empty in the SOAP request,
    :pass => @pass  # as does this.
  }
end
Run Code Online (Sandbox Code Playgroud)

尽管这是一个事实,即@user@pass已初始化为非空字符串.

当我更改代码以使用本地代码时,它的工作方式与我期望的一样:

user = @user
pass = @pass

create_session_response = client.request "createSession" do
  soap.body = {
    :user => user, # Now this has the value I expect in the SOAP request,
    :pass => pass  # and this does …
Run Code Online (Sandbox Code Playgroud)

ruby block instance-variables savon

26
推荐指数
2
解决办法
6125
查看次数

为什么Scala语言要求您初始化实例变量而不是依赖于默认值?

Scala语言要求您在使用之前初始化实例变量.但是,Scala不为您的变量提供默认值.相反,您必须使用通配符下划线手动设置其值,该下划线的作用类似于默认值,如下所示

var name:String = _
Run Code Online (Sandbox Code Playgroud)

我知道,我知道......我可以在类定义中定义一个构造函数,它将实例变量作为参数,因此Scala不会强制其初始化,如下所示

class Person(var name:String) 
Run Code Online (Sandbox Code Playgroud)

但是,我需要在体内声明它,因为我需要使用其元素为FIELD或METHOD的Java注释; 也就是说,它只能应用于在我们类的主体中声明的实例变量或方法.

问题:为什么Scala语言要求您初始化一个实例变量 - 无论是默认值_还是您想要的任何内容 - 在类的主体中声明而不是依赖于默认值?

scala initialization instance-variables default-value

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

python:当class属性,实例属性和方法都具有相同的名称时会发生什么?

当名称相同时,python如何区分类属性,实例属性和方法?

class Exam(object):

    test = "class var"

    def __init__(self, n):
        self.test = n

    def test(self):
        print "method : ",self.test

test_o = Exam("Fine")

print dir(test_o)

print Exam.test
print test_o.test
test_o.test()
Run Code Online (Sandbox Code Playgroud)

输出:

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__',    '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'test']
<unbound method load.test>
Fine
Traceback (most recent call last):
  File "example.py", line 32, in <module>
    test_o.test()
TypeError: 'str' object is not callable
Run Code Online (Sandbox Code Playgroud)

怎么打电话

  1. class属性, Exam.test- > <unbound method load.test>output显示方法 …

python methods instance-variables class-attributes

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

类变量在python中的所有实例之间共享?

我在一周前开始使用python进行编码,这是我的错误,我很快就开始使用oops,类和对象进行编码.我认为我的C++熟练程度会有所帮助....我得到了以下代码

class A:
     var=0
     list=[]
     def __init__(self):
            pass
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,var和list是有点全局变量,它似乎在所有实例中共享....我认为它在所有实例中都是不同的.....我花了半天才弄明白那....它没有任何意义,一个变量只能被一个类对象访问,但是在所有实例之间共享.......只是好奇,它背后有原因吗??? ??

python class global-variables instance-variables member

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

非静态方法可以修改静态变量

我想知道非静态方法如何修改静态实例变量.我知道静态方法只能访问其他静态方法和静态变量.但是,另一方是真的吗?非静态方法可以只访问非静态变量吗?例如:

public class SampleClass {
  private static int currentCount = 0;

  public SampleClass() {
    currentCount++;
  }

  public void increaseCount() {
    currentCount++;
  }
}
Run Code Online (Sandbox Code Playgroud)

这段代码编译,我想知道为什么在静态访问权限方面.

java methods static access-modifiers instance-variables

24
推荐指数
3
解决办法
8万
查看次数

Java实例变量与局部变量

我是高中时的第一个编程课.我们正在完成第一学期项目.这个项目只涉及一个类,但有很多方法.我的问题是实例变量和局部变量的最佳实践.似乎使用几乎只有实例变量进行编码会更容易.但我不确定这是我应该怎么做的,或者我是否应该更多地使用局部变量(我只需要让方法更多地考虑局部变量的值).

我的理由也是因为很多时候我想要一个方法返回两个或三个值,但这当然是不可能的.因此,简单地使用实例变量似乎更容易,因为它们在类中是通用的,所以不必担心.

java variables instance-variables

23
推荐指数
3
解决办法
3万
查看次数