有没有可能像Python允许的那样,继承一个独立模块中的类?有没有其他方法可以在不大幅改变结构的情况下完成
文件1->
Module X
Class Y
end
end
文件2->
require relative 'path/to/File 1'
Module A
Class B
end
end
我想把Y继承到B中
假设我有以下数据结构:
module A
module B
module C
class D
end
end
end
end
我想在客户端代码中访问它,如下所示:
C::D
而不是
A::B::C::D
一种解决方案是在模块A中定义一个方法,如下所示:
module A
def self.get_d
B::C::D
end
end
A.get_d
但问题是,C::D已经在系统中的许多地方定义了。所以我需要向后兼容。我该如何处理这种情况?
我想将常量FOO::BAR转换为字符串"BAR"。
这与所做的截然相反,而且非常类似于,但我希望得到一个字符串,而不是实际的模块引用。
我想我可以让我自己的助手来做这件事,但是我无法得到FOO::BAR的“紧张”版本。
理想情况下,我想避免任何第三方宝石。
示例:
class FOO
BAR = {}
end
# this works
FOO #=> FOO
FOO.name #=> "FOO"
# this doesn't
FOO::BAR #=> {}
FOO::BAR
我想在Elixir 1.0.3中创建一个函数,引用它的“父”作用域中的一个变量。在这种情况下,它的父作用域是一个模块。
以下代码与我在上一个问题中使用的代码相同:
defmodule Rec do
def msgurr(text, n) when n <= 1 do
IO.puts text
end
def msgurr(text, n) do
IO.puts text
msgurr(text, n - 1)
end
end
如果我将其更改为以下内容:
defmodule Rec do
counter = "done!"
我在一个常量文件夹中有几个常量文件和一个index.js文件。
index.js文件,
import * as env from "./env.constants";
import * as httpC from "./http.constants";
import * as localStorage from "./localStorage.constants";
import * as routes from "./routes.constants";
const appConstants = {
...env
我想在我的应用程序中共享一些变量,比如基本路径。这些变量需要在模块配置期间可访问。我的观点是,我可以使用常量或提供者。
我有几个模块,每个模块都有自己的路由配置。在这些路由配置中,我想访问一些设置,例如。
这适用于app-module-configuration,但不适用于其他module-configuration(对于其他模块上的控制器),我总是得到"Unknown provider: info from myApp.orders“。
var myApp = angular.module('myApp', ['myApp.orders']);
Q1:我最近读过“C++ Primer”一书,当时我读到:
要替换变量的值,编译器必须查看变量的初始化程序。当我们将一个程序分成多个文件时,每个使用const的文件都必须访问它的初始化程序。为了查看初始化器,必须在每个希望使用变量值的文件中定义变量。
我有一个问题:当我使用在其他文件中定义的变量时,我只使用extern声明就足够了,为什么我要声明must have access to its initializer,所以我做了一个测试:
在main.cpp中,我写了以下内容:
#include <iostream>
using namespace std;
extern
我在模型中定义了一个常量,并且需要在帮助器中访问它。有办法这样做吗?示例:
#app/models/my_model.rb
class MyModel < ActiveRecord::Base
VALUE = 3
def self.get_value
VALUE
end
end
#app/helpers/users_helper.rb
module UsersHelper
VALUE_V1 = MyModel.get_value
VALUE_V2 = MyModel::VALUE
end
VALUE_V1和VALUE_V2都失败了(未初始化的常量)。
我成功地使用了'AWS‘(Amazon Web Services) SDK版本2(不是大写字母的'Aws’,因为这是SDK版本1的命名空间,我使用的是'Aws‘版本2),命名空间常量'Aws’在rails控制器级别是已知的,但如果我深入一层,比如尝试在由同一控制器创建的模型中使用'Aws‘,则'Aws’命名空间是未知的。我得到一个未定义的常量'Aws‘错误。
我的假设是,Aws工具包是通过在Gemfile中包含gem来初始化的,它就在那里,所有看起来都是正确的。捆绑检查表明所有问题都已解决,正如我所说的,它在控制器中工作,但在模型类代码中
我编写了一个模块,其中包含了我正在开发的大型Javascript代码库中一些不那么有趣的部分,称为boring.js。
它是从一个主要模块导入的,该模块完成了大多数更有趣的工作,称为main.js。
boring.js中有一个名为Log的类,它被导出到main.js并实例化为变量log。调用函数log.save(newLogMsg)将newLogMsg保存为文件。
log.save(newLogMsg)从main.js调用时工作正常
当我试图从驻留在log.save(newLogMsg)中的函数中调用boring.js时,我会得到以下错误:
ReferenceError: log is not
在提供OpaqueToken方面需要一些帮助。使用角2β-12。如果提供程序键是字符串,但在使用OpaqueToken时不工作,则工作正常。在子类中,SF是未定义的。
父类:
export let SF = new OpaqueToken('sf');
export class A {
testMsg: string = 'hello';
}
@Component({
template: `<child></child>`,
providers: [
provide(SF, {useValue: A}),
是否有任何方法可以访问baz_method内部的class Qux,而不提及模块名称空间从一开始?当有许多嵌套模块时,代码看起来并不干净。
module Foo
module Bar
module Baz
class Qux
def self.qux_method
Foo::Bar::Baz.baz_method
end
end
def self.baz_method
end
end
end
end
错误类似于NameError: uninitialized constant Foo::Bar (当Bar不是Foo的后代时)。
我知道这跟装货有关(自动装货?)常量,而且我觉得lib/中的任何东西都可以不用::作为前缀,因为它是自动添加的(或者其他什么的)。
刚才发生在我身上的一个例子是:
app/assets/classes/base_class.rb
class BaseClass
end
应用程序/资产/某些模块/一些_class.rb
module SomeModule
class SomeClass < BaseClass
end
end
我运行了一个规范,得到了“加