解决载入了名字空间‘rlang’ 0.4.5,但需要的是>= 0.4.6

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决载入了名字空间‘rlang’ 0.4.5,但需要的是>= 0.4.6相关的知识,希望对你有一定的参考价值。

参考技术A 在library(clusterProfiler)的时候出现,出现rlang提示要求高版本。

一开始,以为是clusterProfiler版本太高,rlang太低,就开始定位,是不是因为R包版本太高导致的不兼容?
但是发现,使用BiocManager::install,rlang最高目前也才0.4.5,哪里来的0.4.6。
后面上了github,发现13天前rlang确实可以升级到了0.4.6,不过BiocManager::install对应的仓库包根本没更新。
当然这不是重点,因为我发现无论是升级rlang版本,还是降级clusterProfiler版本,都没能实现。

php设计模式--命名空间与自动载入

关于命名空间:

  最早的php是没有命名空间的概念的,这样不能存在相同名称的类或者函数,当项目变大了之后,产生冲突的可能性就高了,代码量也会变大,为了规划,从php5.3开始对命名空间就支持了。

说明代码:

test1.php
<?php //声明命名空间 namespace Test1; function test(){ echo "test1<br/>"; }
test2.php
<?php
//声明命名空间
namespace Test2;

function test(){
	echo "test2<br/>";
}

将test1.php ,test2.php引入到test.php中:

test.php
<?php
//引入test1,test2
require ‘test1.php‘;
require ‘test2.php‘;

//命名空间的使用
Test1\test();
Test2\test();

 如果不使用命名空间,显而易见php会报函数名重复致命错误,如果使用命令空间结果如下:

test1
test2

 

关于自动载入: 

  之前的php都是通过include或者require来引入php的,当项目越来越大的时候,如果一个php文件需要引入几十个php类的时候,那就会引入几十行,这样对管理代码和开发来说是很不方便的。在php5.2之后就提供了类的自动载入功能。

   在php5.2中提供了__autoload 方法来引入,但是当多个php文件同时使用此方法时会有函数名重复的可能,在php5.3中这个函数被废弃了,系统提供了一个spl_auto_register()的方法。当换成spl_auto_register自动载入类之后,可避免冲突。

Test3.php
class Test3 { static function test() { echo "test3-class<br/>"; } }
Test4.php
<?php class Test4 { static function test() { echo "test4-class<br/>"; } }
<?php
spl_autoload_register(‘autoload1‘);//函数名作为参数传入
spl_autoload_register(‘autoload2‘);//函数名作为参数传入可支持多个

Test3::test(); 
Test4::test(); 

function autoload1($class) 
{ 
  require __DIR__.‘/‘.$class.‘.php‘; 
}

function autoload2($class)
{
	require __DIR__.‘/‘.$class.‘.php‘;
}

  

结果如下:

test3-class
test4-class

 

* 当php执行过程中发现你使用的类并不存在,这时候,php会把那个类名(Test3)告诉自动载入函数(autoload),然后我们只需要引入相关类就可以了。

总结:命名空间和自动载入对我们写好面向对象开发是很重要的。




以上是关于解决载入了名字空间‘rlang’ 0.4.5,但需要的是>= 0.4.6的主要内容,如果未能解决你的问题,请参考以下文章

在带有rlang的lazyeval调用中使用二元运算符

JAVA 不同类载入器命名空间的理解

使用 rlang 的 enexprs 捕获函数

php设计模式--命名空间与自动载入

SPARK教授风采| 历史百大心理学家名字载入教科书美国两院院士

Android 解决TextVIew载入自己定义字体慢的问题