我正在努力了解如何perl处理shebang线.
我曾经认为命令行中"命令位置"中提到的任何解释器都优先于shebang行中提到的解释器.例如,如果调用的可执行脚本demo看起来像这样
#!/usr/local/bin/perl-5.00503
printf "$]\n";
Run Code Online (Sandbox Code Playgroud)
...然后我会观察以下内容:
$ ./demo
5.00503
% /usr/local/bin/perl-5.22 ./demo
5.022003
Run Code Online (Sandbox Code Playgroud)
IOW,在第一次执行中,shebang中的解释器是正在运行的解释器,而在第二次执行中,它是在命令行中提到的解释器.到现在为止还挺好.
但是现在,如果我将shebang上的"解释器"更改为类似的东西/usr/bin/wc,那么它总是胜过perl我在命令行中提到的任何解释器:
% cat demo-wc
#!/usr/bin/wc
printf "$]\n";
% ./demo-wc # produces the expected behavior
4 3 31 ./demo-wc
% /usr/local/bin/perl-5.22 ./demo-wc
4 3 31 ./demo-wc
% /usr/local/bin/perl-5.14 ./demo-wc
4 3 31 ./demo-wc
Run Code Online (Sandbox Code Playgroud)
AFAICT,这种特殊行为似乎是有限的perl口译员; 非perl翻译,例如/bin/bash,"否定"shebang:
% /bin/bash ./demo-wc
$]
Run Code Online (Sandbox Code Playgroud)
最重要的是,perl根据所提到的翻译,处理shebang似乎有完全不同的政策.
perl确定要遵循的政策?以下玩具示例有点奇怪,但它显示问题就像我可以说的那样.
首先,没有问题的部分:
class TupleWrapper(tuple):
def __new__(cls, ignored):
return super(TupleWrapper, cls).__new__(cls, [1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
该类TupleWrapper采用任意方式返回类似于常量的类似元组的对象(1, 2, 3).例如:
>>> TupleWrapper('foo')
(1, 2, 3)
>>> TupleWrapper(8)
(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
现在,考虑这个类:
class ListWrapper(list):
def __new__(cls, ignored):
return super(ListWrapper, cls).__new__(cls, [1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
TupleWrapper除了它的子类list而不是它之外,它是相同的tuple.因此,我期待以下
>>> ListWrapper('foo')
[1, 2, 3]
>>> ListWrapper(8)
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
事实上,我得到的是
>>> ListWrapper('foo')
['f', 'o', 'o']
>>> ListWrapper(8)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' …Run Code Online (Sandbox Code Playgroud) 例如,这段代码
data <- data.frame(month = factor(c("Nov", "Dec", "Jan", "Feb")),
count = c(1489, 788, 823, 1002))
g <- (ggplot2::ggplot(data, ggplot2::aes(x=month, y=count))
+ ggplot2::geom_bar(stat="identity")
+ ggplot2::scale_x_discrete(limits=rev(data$month))
+ ggplot2::coord_flip())
g
Run Code Online (Sandbox Code Playgroud)
...产生这个
将计数(1489、788 等)添加到相应栏的右侧的最简单方法是什么?
我对水平情况特别感兴趣,但我也想知道如何对垂直情况做类似的事情(计算在每个条形的顶部):
g <- (ggplot2::ggplot(data, ggplot2::aes(x=month, y=count))
+ ggplot2::geom_bar(stat="identity"))
g
Run Code Online (Sandbox Code Playgroud)
我正在寻找使用Python 2.7.x标准库中的模块将HTML转换为文本的最佳方法.(即,不BeautifulSoup,等等)
通过HTML到文本的转换,我的意思是道德等同于lynx -dump.实际上,只需智能地删除HTML标记,并将所有HTML实体转换为ASCII(或转换为UTF8编码的unicode)就足够了.
请不要使用基于正则表达式的答案.(正则表达不能完成任务.)
谢谢!
在定义了一些构造函数之后,例如Child,我看到了以下两种形式:
Child.prototype = Parent.prototype;
Run Code Online (Sandbox Code Playgroud)
要么
Child.prototype = new Parent();
Run Code Online (Sandbox Code Playgroud)
两个都正确吗?如果是这样,是否有理由偏爱另一个?
假设这样定义了两个新类型
type MyProductType a = (FType1 a, FType2 a)
type MyCoproductType a = Either (FType1 a) (FType2 a)
Run Code Online (Sandbox Code Playgroud)
......那就是FType1并且Ftype2都是Functor.
如果现在要声明MyProductType并MyCoproductType作为实例Functor,编译器是否需要对各自fmap的定义进行明确定义,还是可以从之前的定义中推断出这些定义?
此外,这个问题的答案是依赖于实现的,还是来自Haskell规范?
作为背景,这个问题的动机是试图弄清楚我正在读的东西.作者首先定义
type Writer a = (a, String)
Run Code Online (Sandbox Code Playgroud)
...后来写道(我的重点)
...
Writer类型构造函数是functorial ina. 我们甚至不需要实现fmap它,因为它只是一种简单的产品类型.
强调的文字是我试图理解的评论.我认为这意味着哈斯克尔可以推断fmap的对任何基于函子类型ADT,并且,特别是它可以推断出fmap一个'简单的产品类型’之类Writer的,但现在我认为这种解释是不正确的(至少如果我正确阅读ØrjanJohansen的回答.
至于作者对那句话的意思,现在我真的不知道.也许所有他的意思是,Writer以这样一种方式重新定义以使其功能性可以被明确化是不值得的,因为它是如此"简单......类型".(抓住稻草在这里.)
这篇文章的标题说明了一切.关键是调用函数X应该与被调用函数的签名无关Y.IOW,X应该只是传递给Y,集体,所有它(参数X)收到的,在离开它Y抱怨签名是否关闭.
我认为这只是一个问题
sub X {
return Y( @_ );
}
Run Code Online (Sandbox Code Playgroud)
......但显然不是:
sub getpwuid_wrapper {
return getpwuid( @_ );
}
Run Code Online (Sandbox Code Playgroud)
上面的包装器不仅仅是包装:
DB<7> p getpwuid( 5 )
gamesx560games/usr/games/usr/sbin/nologin
DB<8> p getpwuid_wrapper( 5 )
daemonx11daemon/usr/sbin/usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)
接下来的一点给出了可能发生的事情的线索:
DB<9> p getpwuid( 1 )
daemonx11daemon/usr/sbin/usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)
由于我无法理解的原因,我认为这getpwuid( @_ )被解释为getpwuid( scalar @_ ).
注意: getpwuid只是举例说明问题.在实践中,人们需要这种传递功能,主要是直到运行时才知道将要调用的函数; 例如,当此功能是回调时.
有没有办法用一个表达式来实现以下目的?:
copy_of_df <- df
names(copy_of_df) <- c("some", "new", "column", "names", ...)
Run Code Online (Sandbox Code Playgroud)
例如,从df下面定义开始
> set.seed(0)
> h <- 5
> (df <- data.frame(x = 1, y = 1:h, z = sample(LETTERS[1:3], h, replace = T)))
x y z
1 1 1 C
2 1 2 A
3 1 3 B
4 1 4 B
5 1 5 C
Run Code Online (Sandbox Code Playgroud)
...我可以复制df并重命名副本的列,如下所示:
> copy_of_df <- df
> names(copy_of_df) <- c("P", "Q", "R")
> copy_of_df
P Q R
1 …Run Code Online (Sandbox Code Playgroud) 假设我有一个名为的列表
somelist <- list(a = 1, b = 5, c = 3)
Run Code Online (Sandbox Code Playgroud)
我知道我可以somelist$b通过分配NULL它来放弃:
somelist$b <- NULL
Run Code Online (Sandbox Code Playgroud)
我认为这对于交互式工作来说很好,但对于程序化工作来说并不是很好,因为它会强制创建其他多余的变量.
例如,假设foo(42)计算结果类似于somelist上面的列表,并且我想传递将b元素从foo(42)其他函数中删除的列表bar.在这种情况下,应用上面显示的方法需要以下内容:
superfluous.variable <- foo(42)
superfluous.variable$b <- NULL
bar(superfluous.variable)
rm(superfluous.variable)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来传递bar修改后的结果,foo这不需要这些多余的任务.上面的四行将崩溃为一行:
bar(drop.item.from.list(foo(42), item.to.drop = "b"))
Run Code Online (Sandbox Code Playgroud)
R是否已经具有上述假设drop.item.from.list功能?
此代码用于教科书中的练习.
如果我定义
minmax :: (Ord a, Show a) => [a] -> Maybe (a, a)
minmax [] = Nothing
minmax [x] = Just (x, x)
minmax (x:xs) = Just ( if x < xs_min then x else xs_min
, if x > xs_max then x else xs_max
) where Just (xs_min, xs_max) = minmax xs
Run Code Online (Sandbox Code Playgroud)
......然后,ghci我得到这样的警告:
*...> minmax [3, 1, 4, 1, 5, 9, 2, 6]
<interactive>:83:1: Warning:
Defaulting the following constraint(s) to type ‘Integer’
(Num a0) arising from …Run Code Online (Sandbox Code Playgroud) r ×3
haskell ×2
perl ×2
python ×2
bifunctor ×1
functor ×1
ggplot2 ×1
ghci ×1
html-parsing ×1
html-to-text ×1
inheritance ×1
javascript ×1
oop ×1
perl5 ×1
shebang ×1
subclass ×1
subclassing ×1