我有一个属于公司的模型 CompanyBranch:
class CompanyBranch < ActiveRecord::Base
belongs_to :company
...
end
Run Code Online (Sandbox Code Playgroud)
公司有一个属性“category_id”。现在我想通过公司的category_id 来确定CompanyBranch 的范围。像这样的东西:
scope :category, -> (category_id) { where company.category_id: category_id }
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。这样做的正确方法是什么?
我试图将一个参数传递给一个函数,它是一个字符串,但必须同时评估它的名称(符号?)和它的值(参见下面的示例)。到目前为止,我能够用来base::get获取实际值,但分配flowCore::'transform,flowSet-method'失败。我知道关于 SO 的许多问题都是关于将字符串评估为变量名,正如您将在下面看到的,我尝试了很多。我认为必须有一个rlang基于答案的答案,但我找不到任何解决方案,任何指针将不胜感激。
一个可重现的例子:
# load required packages -------------------------------------------------------
library(flowAI) # Bioconductor
library(flowCore) # Bioconductor
library(rlang)
# load example data ------------------------------------------------------------
data(Bcells) # from flowAI
# reprex -----------------------------------------------------------------------
timeCh <- "Time" # this could be variable
x <- flowCore::transform(Bcells,`Time`=(`Time`-min(`Time`))) # this works
y <- flowCore::transform(Bcells,`Time`=(get(timeCh)-min(get(timeCh)))) # still good
z <- flowCore::transform(Bcells,timeCh=(get(timeCh)-min(get(timeCh)))) # not good
Run Code Online (Sandbox Code Playgroud)
虽然在上面的代码中,转换 forz将运行得很好,但实际上一个新列被添加到名为“timeCh”的 flowSet 中。这不是想要的效果,因为我想使用转换来专门更改现有的 column Time。因此,我一直在尝试一些策略来评估存储在 timeCh 中的字符串作为对象名称 (?) into transform,但无济于事:
timeSym <- sym("Time")
timequo <- …Run Code Online (Sandbox Code Playgroud) 所有疯狂的Java范围规则都让我头晕目眩,而公共静态无效的废话无助于解决问题.到目前为止,我使用的所有编程语言都是词法作用域或者没有任何访问修饰符的一些近似,即内部东西捕获外部东西,并且只要内部存在东西就可以访问外部东西.
那么我如何理解Java中内部类的作用域规则呢?他们是否可以访问在外部类中声明的变量,或者是否有一些奇怪的边缘情况我不得不担心因为所有公共静态私有东西浮动?
考虑到我之前关于在大型Mathematica项目中切换数值和分析"模式"的问题的解决方案,我想到了使用Context作为范围构造的想法.
基本思想是在自己的上下文中进行所有数值赋值,例如
Begin["Global`Numerical`"]
par1 = 1;
par2 = 2;
...
End[]
Run Code Online (Sandbox Code Playgroud)
并且在全局背景下具有所有复杂的分析函数,矩阵等.
理想情况下,我可以在全局上下文中工作,并通过简单Begin[Global'Numeric']切换回数字的所有内容End[].
不幸的是这不是DOEN工作,因为如f[par1_,par2_,...] := foo在全球范围内定义不会用par1,par2等已经在全球的背景下子被定义.
有没有办法让子上下文从父上下文继承定义?是否有其他方法可以使用上下文来创建简单的可切换范围?
我在这里学习模式,对PHP来说很新,所以我正在使用代码示例.请原谅我在这里使用'global',但我想了解php变量范围.
这是myGlobals.php:
<?php
global $db_server;
// other code not shown
?>
Run Code Online (Sandbox Code Playgroud)
这是connectToDb.php:
<?php
require_once 'myGlobals.php';
// no declared functions in this file, all inline code
$db_server = mysql_connect(.....);
mysql_select_db( "theDatabase", $db_server);
?>
Run Code Online (Sandbox Code Playgroud)
这是addDbRecords.php:
<?php
require_once 'myGlobals.php';
// other inline code.....
doAddDeleteRecord($db_server);
function doAddDeleteRecord($db_server)
{
//global $db_server;
if( !mysql_query($query, $db_server))
{
// handle the error...
}
}
?>
Run Code Online (Sandbox Code Playgroud)
这是index.php:
<?php
require_once 'myGlobals.php';
require_once 'connectToDb.php';
require_once 'addDbRecords.php';
// this is simplified, just trying to show that everything in inline code
?>
Run Code Online (Sandbox Code Playgroud)
这是问题所在.当我 …
我知道有一个简单的解决方案,但我不知道如何实现它.
我正在寻找如何实现答案而不是我需要做的事情.答案的一半已经在这个页面上: Xtext交叉引用和范围
我的问题是下面的语法:
DomainModel:
"DOMAINMODEL" name=ID "{"
"ENTITYS" "{"
(Entitys+=Entity)*
"}"
"ENTITY_RELATIONSHIP" "{"
(Relationships+=Relationship)*
"}"
"}";
Entity:
name=ID "{"
(Attributes+=Attribute)*
"}";
Attribute:
StringAttribute | NumberAttribute | ImageAttribute;
StringAttribute:
"STRING" name=ID;
NumberAttribute:
"NUMBER" name=ID;
ImageAttribute:
"IMAGE" name=ID;
// Relationship = [new table name] : [shared key name] -> ref_table(ref_id)
Relationship:
name=ID ":" newEntityName=ID "->" refEntityName=[Entity|ID]"("refName=[Attribute|ID]")"; // <- Problem here
Run Code Online (Sandbox Code Playgroud)
当我编写模型时,我无法获得"refName = [Attribute | ID]"来引用实体内部的属性.在下面的代码中
DOMAINMODEL auctionHouse{
ENTITYS {
lots{
NUMBER id0
NUMBER lotNo
STRING name
STRING priceEstimate
STRING description …Run Code Online (Sandbox Code Playgroud) 我想修复我的代码PMD 违规:
Use explicit scoping instead of the default package private level
Run Code Online (Sandbox Code Playgroud)
它出现在我的代码中的这些地方:
File saveFile = new File("C:/Upload/");
EmployeImplMetier dbE= new EmployeImplMetier();
DepartementImplMetier dbD = new DepartementImplMetier();
FonctionImplMetier dbF = new FonctionImplMetier();
ServiceImplMetier dbS = new ServiceImplMetier();
TypePaiementImplMetier dbT = new TypePaiementImplMetier();
ModePaiementImplMetier dbM = new ModePaiementImplMetier();
Run Code Online (Sandbox Code Playgroud)
我之前找到了这个LINK但它没有帮助。
谁能建议如何修复它?
考虑这个例子:
for iter in xrange(10):
myvar = iter
print myvar
# 9
Run Code Online (Sandbox Code Playgroud)
这myvar显然在循环之外?但它仍然可以访问.如果这是Perl,则会抛出错误.
Python中这种功能背后的原因是什么?有害吗?那么,在循环之前声明变量的最佳做法是什么?
我试图理解范围在do块中是如何工作的.
如果我有以下代码:
l = [1, 2, 3]
m = [1, 2]
Run Code Online (Sandbox Code Playgroud)
然后这工作正常
res = do
a <- l
b <- m
return (a, b)
Run Code Online (Sandbox Code Playgroud)
并返回笛卡尔乘积m和l.
为了理解范围,我试图以不同的形式重写它(没有做块)
我知道块只是monadic操作的语法糖,所以我试图"unsugar"它并使用它并想出了这个:
res = l >>= (\a -> m) >>= (\b -> return (a, b))
Run Code Online (Sandbox Code Playgroud)
奇怪的是我收到了这个错误Not in scope: ‘a’.
任何人都可以告诉我我做错了什么,可能,范围如何工作,因为它真的看起来像魔术return块在do块中能够访问?
非常感谢你
父环境通常是全球环境.
但偶尔也不是.例如,在函数内的函数中,或在函数中的函数中tryCatch().
严格来说,确实<<-分配给全球环境,还是仅仅分配给父环境?