我的问题是关于这个AR及其实例变量@saved
class PhoneNumber < ActiveRecord::Base
has_one :user
validates_presence_of :number
def self.create_phone_number( user, phone_hash )
@new_phone = PhoneNumber.new(phone_hash)
@user = user
PhoneNumber.transaction do
@user.phone_numbers << @new_phone
@new_phone.save!
@user.save!
end
@saved = true
return @new_phone
rescue ActiveRecord::RecordInvalid => invalid
@saved = false
return @new_phone
end
def saved?
@saved ||= false
end
end
Run Code Online (Sandbox Code Playgroud)
我的理解是,实例变量将通过实例的存在来保持它们的值.
在我的控制器中使用此AR时,保存了吗?总是返回false ..
@phone_number = PhoneNumber.create_phone_number(@active_user, params[:phone_number])
puts "add_phone_number"
if @phone_number.saved? => always false
Run Code Online (Sandbox Code Playgroud)
关于这些实例变量我缺少什么?谢谢
我想我一直在错误地使用这些术语!
使用局部变量似乎是可取的,可以在应用程序范围内使用,以避免整个应用程序的依赖.
但是在单个控制器中,引用您知道将在使用partial的所有操作中可用的实例变量似乎是可以接受的.
但是,如果执行此操作,则可能存在风险,即特定操作可能会更改为不再向其视图提供实例变量.部分将停止工作.但是,我不确定这是否真的是一个问题,因为常规视图会遇到相同的风险.
如果在部分中引用实例变量,这有关系吗?
我已经读过,@synthesize它将自动创建相应的实例变量,@property@protected默认情况下为 ivars .但是,如果我使用类扩展(如下所示)来指示@property方法是私有的呢?
// Photo.m
@interface Photo ()
@property (nonatomic, retain) NSMutableData *urlData;
@end
Run Code Online (Sandbox Code Playgroud)
相应的ivar会是@private吗?或者我应该明确地声明它是@private这样的吗?
// Photo.h
@interface Photo : Resource {
@private
NSMutableData *urlData;
}
Run Code Online (Sandbox Code Playgroud) 如果我有
[编辑:添加"内部"的类型定义]
interface Inner{
public void execute();
}
class Outer{
int outerInt;
public void hello(){
Inner inner = new Inner(){
public void execute(){
outerInt=5;
}
}
//later
inner.execute();
}
}
Run Code Online (Sandbox Code Playgroud)
调用将该特定对象inner.execute()的outerInt变量设置为,无论它在何处被调用,并且只要该对象存在?或者它只是更改变量的副本而不影响原始对象? Outer5InnerouterIntOuter
我有一些非常基本的Java问题,我想一劳永逸地理解这些问题.我有以下简短的代码:
public class VeryBasicJava{
public static void main(String[] args){
int x = 3;
int y = 4;
swapMe(x, y);
}
private void swapMe(int a, int b){
int a;
int b;
int tmp = a;
this.a = b;
this.b = a;
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译时,我得到了可怕的"非静态方法swapMe(int,int)无法从静态上下文引用"错误.另外,我得到"a已在swapMe(int,int)中定义","b已经在swapMe(int,int)中定义"
我需要最终通过我的厚厚的头骨,是"非静态方法"错误,它是如何(为什么)引起的,以及如何避免它.
此外,我假设你可以做我试图用'swapMe'方法中的'a'和'b'变量做的事情.我以为我可以传入'a'和'b',但也创建新变量'a'和'b',并用"this"关键字引用它们.
我知道这是非常基本的,但这两个"问题"是我使用Java的两个主要问题,并且出于某种原因,似乎无法正确学习.
谢谢大家,花时间阅读本文.祝你有美好的一天.
在下面的代码中,使用它是否安全,_test并期望它有一个vaue NO?或者我是否需要始终在其中明确初始化它- (id)init?
@implementation Test {
BOOL _test;
}
Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
public string Variable1 { get; set;}
public int Variable2 { get; set;}
public void Function()
{
// Has been Variable1 Initialized?
}
Run Code Online (Sandbox Code Playgroud)
在函数内部,我想知道在函数调用之前是否已将值发送到Variable1和Variable2,
即使已发送DEFAULT值,也没问题(对于字符串为null,对于int为0)
我知道你不应该在程序中使用变量名,但我使用的是严格的调试目的,并希望将变量的名称传达给用户以提高可读性。
我有一个这样的文件:
class MyClass(object):
def __init__(self):
pass
def foo(msg=""):
debug("Called from the %s instance.") #quazi-print function that only prints when a DEBUG variable is True.
print(msg)
m = MyClass()
m.foo("Test")
Run Code Online (Sandbox Code Playgroud)
我想m从类本身中检索实例变量名称。虽然这只是一个示例文件,但我使用它向用户传达已在实例变量中的某个属性处创建了原始套接字,并希望显示它的位置(即New socket at m.socket)
这对 Python 可行吗?
昨天我在 Swift 中查看了一段代码,其中包括这一行:
self.self.someProperty
Run Code Online (Sandbox Code Playgroud)
这让我感到惊讶,因为self一词被保留并用作对当前实例的引用。
起初我用其他语言检查了这种现象,但都出错了。这并不奇怪 - 但是,为什么它会在 swift 中编译和运行?
其次,我在互联网上搜索了有关此内容的信息,但没有找到任何相关内容...
编辑 我从我的支票中复制了这一点:
self.someProperty//exactly the same as:
self.self.someProperty//or as:
self.self.self.self.self.someProperty
Run Code Online (Sandbox Code Playgroud)
Swift 文档给出了一些解释:
类型的每个实例都有一个称为 self 的隐式属性,它完全等同于实例本身。
这很好,部分有用,但我认为它仍然不够
所以我问: