您如何知道变量是否已在运行时在代码中的特定位置设置?这并不总是显而易见的,因为(1)变量可以有条件地设置,(2)变量可以有条件地删除.我正在寻找像defined()Perl isset(),PHP或defined?Ruby中的东西.
if condition:
a = 42
# is "a" defined here?
if other_condition:
del a
# is "a" defined here?
Run Code Online (Sandbox Code Playgroud) 如何将字符串转换为类名,但仅限于该类已存在?
如果Amber 已经是一个类,我可以通过以下方式从字符串到类:
Object.const_get("Amber")
Run Code Online (Sandbox Code Playgroud)
或(在Rails中)
"Amber".constantize
Run Code Online (Sandbox Code Playgroud)
但NameError: uninitialized constant Amber如果Amber还没有上课,那么其中任何一个都会失败.
我的第一个想法是使用该defined?方法,但它不区分已存在的类和不存在的类:
>> defined?("Object".constantize)
=> "method"
>> defined?("AClassNameThatCouldNotPossiblyExist".constantize)
=> "method"
Run Code Online (Sandbox Code Playgroud)
那么在我尝试转换之前,如何测试字符串是否命名一个类?(好吧,begin/ rescueblock如何捕获NameError错误?太丑了?我同意......)
所以我尝试了材料设计支持库,当我添加依赖项,编译时,我收到了这个错误.我看了类似的问题并尝试了他们的解决方案,但它不会得到修复,所以我希望你能帮助我.
这是我的logcat:
C:\Users\Jan\AndroidStudioProjects\SwagCalculator3\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\22.2.0\res\values\values.xml
Error:(1) Attribute "rippleColor" has already been defined
Run Code Online (Sandbox Code Playgroud)
这是我的build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.raptor.swagcalculator.swagcalculator"
minSdkVersion 21
targetSdkVersion 22
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:design:22.2.0'
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:support-v4:22.2.0'
compile 'com.android.support:cardview-v7:22.2.0'
}
Run Code Online (Sandbox Code Playgroud) 这可能只是一厢情愿的想法......
有什么方法可以在调用之前检查是否定义了ASP/VBScript函数?
我正在寻找一种方法来访问执行MSBuild时定义的所有Build属性.我有一个配置文件.我想修改配置文件中的属性并将其复制到新位置.有办法吗?
在XE5中所有条件编译如
{$IFDEF MSWINDOWS}
Run Code Online (Sandbox Code Playgroud)
被替换为
{$IF defined(MSWINDOWS)}
Run Code Online (Sandbox Code Playgroud)
例如XE4中的System.Diagnostics.pas
...
implementation
{$IFDEF MSWINDOWS}
uses Winapi.Windows;
{$ENDIF}
{$IFDEF MACOS}
uses Macapi.Mach;
{$ENDIF}
{ TStopwatch }
...
Run Code Online (Sandbox Code Playgroud)
现在在XE5中它看起来像:
...
implementation
{$IF defined(MSWINDOWS)}
uses Winapi.Windows;
{$ELSEIF defined(MACOS)}
uses Macapi.Mach;
{$ELSEIF defined(POSIX)}
uses Posix.Time;
{$ENDIF}
{ TStopwatch }
...
Run Code Online (Sandbox Code Playgroud)
是否有任何特殊原因我应该迁移我的类似调用?
delphi conditional-compilation defined conditional-statements delphi-xe5
我在SaaS工作,任何租户都可以拥有多个联系人列表,每个列表可以有任意数量的自定义字段,此列表的联系人可以存储,列表中的任何数量的组可以包含(使用组)用于分割列表的联系人).每个联系人都有一个必填字段:email_address和为我所提到的列表定义的任意数量的用户定义字段.我们必须能够根据它们所在的组以及用户定义值的值来查找列表的联系人.我们必须提供最多30个用户定义的字段.我现在看到解决这个问题的三种方法:
使用一种EAV(我们尝试这样做),但它看起来相当复杂.我们有一个表列表(租户列表),相关表custom_fields,存储列表订阅者的email_addreses的相关表订阅者,与订阅者和custom_fields表相关的表subscriber_custom_data(订阅者的自定义字段的存储值) .
字段表模式.它的描述在http://blog.springsource.com/arjen/archives/2008/01/24/storing-custom-fields-in-the-database/.在这种情况下,我们将使用与自定义字段相关的字段,该字段将在列中存储所有自定义字段,例如,具有30列以存储每个可能的自定义字段的值,以及存储列的名称和用户名称的映射的表领域.它看起来也很复杂.我们必须至少有30个索引才能按自定义字段的值进行搜索,还有其他问题,
使用某种NoSQL数据库至少用于存储用户定义的字段以及列表的组.您是否认为此类数据库可以在此处提供帮助,如果可以,则如何设计用于存储自定义字段和组.我试着看看不同类型的NoSQL,例如面向文档的MongoDb,但是我立刻看不出它如何帮助解决这个问题.我们可以在这里存储任意属性,但是为了搜索我们需要提前索引它们的自定义字段的值,所以我们必须知道我们将拥有哪些自定义字段.
感谢您提供有关它的任何信息.
我有以下情况:
enum Header
{
Sync,
[OldProtocol] Keepalive,
Ping,
[OldProtocol] Auth,
[OldProtocol] LoginData
//...
}
Run Code Online (Sandbox Code Playgroud)
我需要获取一个OldProtocolAttribute定义了元素的数组.我注意到该Attribute.IsDefined()方法及其重载显然不支持这种情况.
我的问题是:
typeof(Header).GetField()?我正在尝试创建一个函数来打印已定义数字列表的方差:
grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已尝试继续制作这三个功能:
def grades_sum(my_list):
total = 0
for grade in my_list:
total += grade
return total
def grades_average(my_list):
sum_of_grades = grades_sum(my_list)
average = sum_of_grades / len(my_list)
return average
def grades_variance(my_list, average):
variance = 0
for i in my_list:
variance += (average - my_list[i]) ** 2
return variance / len(my_list)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试执行代码时,它会在以下行中给出以下错误:
Line: variance += (average - my_list[i]) ** 2
Error: list index out of range
Run Code Online (Sandbox Code Playgroud)
抱歉,如果我目前的Python知识有限,但我仍在学习 …
所以,我们有代码:
class Foo
def bar
puts "Before existent: #{(defined? some_variable)}"
puts "Before not_existent: #{(defined? nonexistent_variable)}"
raise "error"
some_variable = 42
rescue
puts "exception"
ensure
puts "Ensure existent: #{(defined? some_variable)}"
puts "Ensure not_existent: #{(defined? nonexistent_variable)}"
end
end
Run Code Online (Sandbox Code Playgroud)
并从irb调用它:
> Foo.new.bar
Run Code Online (Sandbox Code Playgroud)
而且,这将返回:
Before existent:
Before not_existent:
exception
Ensure existent: local-variable
Ensure not_existent:
=> nil
Run Code Online (Sandbox Code Playgroud)
现在问题 - 为什么?我们之前提出异常而不是some_variable定义.为什么这样工作?为什么some_variable在ensure块中定义?(顺便说一下,它定义为零)
更新: 感谢@Max的回答,但如果我们更改代码以使用实例变量:
class Foo
def bar
puts "Before existent: #{(defined? @some_variable)}"
puts "Before not_existent: #{(defined? @nonexistent_variable)}"
raise …Run Code Online (Sandbox Code Playgroud)