我有以下代码 /config/initializers/chargify.rb
Chargify.configure do |c|
c.subdomain = 'example'
c.api_key = '123xyz'
end
Run Code Online (Sandbox Code Playgroud)
但我有不同的开发和生产设置.
那么,我如何根据环境获得一组不同的变量值呢?
考虑这个代码:
void foo()
{
goto bar;
int x = 0;
bar: ;
}
Run Code Online (Sandbox Code Playgroud)
GCC 和 Clang拒绝它,因为跳转到bar:绕过变量初始化。MSVC 根本不抱怨(除非使用xafterbar:导致警告)。
我们可以用 a 做类似的事情switch:
void foo()
{
switch (0)
{
int x = 0;
case 0: ;
}
}
Run Code Online (Sandbox Code Playgroud)
现在所有三个编译器都发出错误。
这些片段格式不正确吗?或者他们会导致UB?
我曾经认为两者都是格式错误的,但我找不到标准的相关部分。[stmt.goto]不说这事,而且也不[stmt.select] 。
编辑:尚未回答 - 链接的问题是关于普通的r值,初始化列表是一个单独的,如果相关的概念.
这个语句定义得很好,或者在初始化列表中使用前缀增量运算符,对于在列表中出现两次的变量,未定义的行为?
struct T t = { i, ++i };
Run Code Online (Sandbox Code Playgroud)
我对ANSI C最感兴趣,但知道其他版本的C和/或C++是否有所不同也很有用.如果类似以下的类似结构是合法的:
struct T t = { i, i++ };
struct T t = { ++i, ++i };
struct T t = { i++, ++i };
struct T t = { i++, i++ };
Run Code Online (Sandbox Code Playgroud) 我知道这段代码:
Set<String> set = new HashSet<String>() {{
add("test1");
add("test2");
}};
Run Code Online (Sandbox Code Playgroud)
是真的:
Set<String> set = new HashSet<String>() {
{//initializer
add("test1");
add("test2");
}
};
Run Code Online (Sandbox Code Playgroud)
初始化程序块正在构造函数块之前执行.在上面的示例中,在执行构造函数之前调用add("test1").构造函数可能正在初始化许多实例字段,因此这个类可以工作.我想知道为什么在构造函数之前调用.add()会起作用?有没有导致问题的案例?
(我知道)在c ++中,我可以 declare variable超出范围,除了初始化全局/静态变量之外,我不能运行任何代码/语句.
理念
使用下面棘手的代码以便(例如)做一些 std::map操作是一个好主意吗?
在这里,我使用void *fakeVar并初始化它Fake::initializer()并做任何我想要的东西!
std::map<std::string, int> myMap;
class Fake
{
public:
static void* initializer()
{
myMap["test"]=222;
// Do whatever with your global Variables
return NULL;
}
};
// myMap["Error"] = 111; => Error
// Fake::initializer(); => Error
void *fakeVar = Fake::initializer(); //=> OK
void main()
{
std::cout<<"Map size: " << myMap.size() << std::endl; // Show myMap has initialized correctly :)
}
Run Code Online (Sandbox Code Playgroud) 在ac#initialiser中,如果条件为false,我想不设置属性.
像这样的东西:
ServerConnection serverConnection = new ServerConnection()
{
ServerInstance = server,
LoginSecure = windowsAuthentication,
if (!windowsAuthentication)
{
Login = user,
Password = password
}
};
Run Code Online (Sandbox Code Playgroud)
可以办到?怎么样?
我一直在学习如何使用EF一个星期左右,我一直坚持创建/更新我的数据库的问题.如果不存在,我可以创建一个初始化器来创建数据库:
static class Program
{
static void Main()
{
Database.SetInitializer<GumpDatabase>(new GumpDatabaseInitializer());
....
class GumpDatabaseInitializer : CreateDatabaseIfNotExists<GumpDatabase>
{
public GumpDatabaseInitializer()
{
}
protected override void Seed(GumpDatabase context)
{
context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX Name ON Stations (Name)");
// Other stuff
}
}
Run Code Online (Sandbox Code Playgroud)
或者我可以创建配置来迁移数据库
static class Program
{
static void Main()
{
Database.SetInitializer<GumpDatabase>(new MigrateDatabaseToLatestVersion<GumpDatabase, Configuration>());
....
internal sealed class Configuration : DbMigrationsConfiguration<GumpDatabase>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
}
protected override void Seed(GumpDatabase context)
{
}
Run Code Online (Sandbox Code Playgroud)
每个都正常工作,但我还没有想出办法做到这两点.我可以通过更改SetInitializer调用在两个初始化程序之间切换,但是如果我想创建数据库,如果它不存在,并且如果它是我该怎么做的话还要迁移它?我需要创建自定义初始化程序吗?
谢谢
根据NSGaga答案编辑
class …Run Code Online (Sandbox Code Playgroud) 我目前正在研究Go Lang教程,但遇到了其中一个练习的问题:
https://tour.golang.org/methods/23
练习让我实现了一个ROT13密码.我决定使用从字节到旋转值的映射来实现密码,但我不确定初始化此映射的最佳方法.我不想使用文字初始化地图,但更喜欢通过循环遍历字母表并在循环内设置(键,值)对来编程.我还希望只能从Rot13Reader结构/对象访问该地图,并让所有实例(?)共享相同的地图(而不是每个Rot13Reader一个副本).
这是我目前正在进行的Go计划:
package main
import (
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
var rot13Map = map[byte]byte{}
func (rotr *rot13Reader) Read(p []byte) (int, error) {
n, err := rotr.r.Read(p)
for i := 0; i < n; i++ {
if sub := rot13Map[p[i]]; sub != byte(0) {
p[i] = sub
}
}
return n, err
}
func main() {
func() {
var uppers = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
var lowers = []byte("abcdefghijklmnopqrstuvwxyz")
var init = func (alphabet …Run Code Online (Sandbox Code Playgroud) reduce函数如何在python3中使用三个参数而不是两个参数.所以,对于两个,
tup = (1,2,3)
reduce(lambda x, y: x+y, tup)
Run Code Online (Sandbox Code Playgroud)
我得到这个.这只是总结了所有元素tup.但是,如果你给reduce函数三个参数,如下所示,
tup = (1,2,3)
reduce(lambda x, y: x+y, tup, 6)
Run Code Online (Sandbox Code Playgroud)
这会给你一个价值12.我检查了python3的文档,它说第三个参数是初始化器.那就是说,如果没有插入第三个参数,那么默认初始化器是什么?
我只想创建一个二维数组的数组来存储坐标点.
所以我想要一个数组,其中每个索引返回一个二维数组,我将其用作x和y.
这是我尝试过的:
waypoints = new int[4][,] {
{{0},{6, 0}},
{{1},{1, 1}},
{{2},{1, 5}},
{{3},{6, 5}}
};
Run Code Online (Sandbox Code Playgroud)
我意识到这可能看起来很愚蠢,但我已经尝试在谷歌上查找了,而且我没有取得任何好成绩.
它给出了一个错误:
"错误CS0623:数组初始化程序只能在变量或字段初始化程序中使用.请尝试使用新表达式"
我也试过这样做:
waypoints = new int[4][,] {
new int[,] {6, 0},
new int[,] {1, 1},
new int[,] {1, 5},
new int[,] {6, 5}
};
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误:
"错误CS0846:预期嵌套数组初始化程序"
initializer ×10
c# ×3
c++ ×3
static ×2
arrays ×1
c ×1
environment ×1
go ×1
goto ×1
java ×1
migration ×1
mysql ×1
python ×1
python-3.x ×1
reduce ×1