我希望能够做到这样的事情:
class ThingIDs
{
const Something = 1;
const AnotherThing = 2;
}
$thing = 'Something';
$id = ThingIDs::$thing;
Run Code Online (Sandbox Code Playgroud)
这不起作用.做一些等效的直接方式吗?请注意,我坚持上课; 它在图书馆我无法重写.我正在编写在命令行上接受参数的代码,我真的希望它采用符号名而不是id号.
所以,我知道我可以这样做:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
Run Code Online (Sandbox Code Playgroud)
并拥有sitelist和anotherlist都包含www.foo.com和www.bar.com.不过,我真正想要的是anotherlist对还包含www.baz.com,而无需重复www.foo.com和www.baz.com.
这样做会在YAML解析器中出现语法错误:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
- www.baz.com
Run Code Online (Sandbox Code Playgroud)
只使用锚和别名,似乎不可能做我想要的而不添加另一级子结构,例如:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist:
- *sites
- www.baz.com
Run Code Online (Sandbox Code Playgroud)
这意味着此YAML文件的使用者必须了解它.
有一种纯粹的YAML方式做这样的事情吗?或者我是否必须使用一些后YAML处理,例如实现变量替换或自动提升某些类型的子结构?我已经在进行那种后处理来处理其他一些用例,所以我并不完全厌恶它.但我的YAML文件将由人类编写,而不是由机器生成,因此我希望尽量减少用户在标准YAML语法之上需要记忆的规则数量.
我也希望能够用地图做类似的事情:
namedsites: &sites
Foo: www.foo.com
Bar: www.bar.com
moresites: *sites
Baz: www.baz.com
Run Code Online (Sandbox Code Playgroud)
我有一个搜索YAML规范,但找不到任何东西,所以我怀疑答案只是"不,你不能这样做".但是,如果有人有任何想法会很棒.
编辑:由于没有答案,我假设没有人发现我在YAML规范中没有的任何东西,并且这不能在YAML层完成.所以我打开了一个问题,想要对YAML进行后处理以帮助解决这个问题,以防将来有人发现这个问题.
首先,我明白了如何 iteratees的,不够好,我大概可以写一个简单的和越野车实现无再参考任何现有的.
我真正想知道的是为什么人们似乎发现它们如此迷人,或者在什么情况下它们的好处证明了它们的复杂性.将它们与懒惰的I/O进行比较有一个非常明显的好处,但这对我来说似乎非常像一个稻草人.我从来没有对懒惰的I/O感到舒服,除了偶尔hGetContents或者readFile大多数非常简单的程序之外我都避免使用它.
在实际场景中,我通常使用传统的I/O接口和适合任务的控件抽象.在那种情况下,我只是没有看到迭代者的好处,或者他们是一个适当的控制抽象的任务.大多数时候,他们看起来更像是不必要的复杂性,甚至是适得其反的控制倒置.
我已经阅读了很多关于它们的文章和使用它们的资料,但还没有找到一个令人信服的例子,实际上让我想到了"哦,是的,我也曾在那里使用它们".也许我只是没有读过正确的.或许还有一个尚未设计的界面,比我见过的任何一个都简单,这会使他们感觉不像瑞士军用链锯.
我只是患有非发明的综合症或者我的不安是否有充分根据?或者它可能完全不同于其他东西?
我正在努力理解Statemonad,并编写了著名的斐波那契数列的两个简单版本来记忆该函数。let体内的那只跑的很慢。那个<-跑得很快。我的问题:为什么?<-在允许M.lookup通孔Data.Map工作的同时,是否让以某种方式引起全面评估?
-- using state monad and let
-- very slow
fibLet :: Int -> State (M.Map Int Integer) Integer
fibLet n = do
case n of 0 -> return 0
1 -> return 1
n -> do
mp <- get
if M.member n mp
then return $ fromJust (M.lookup n mp)
else do
let s1 = evalState (fibLet (n - 1)) mp
let s2 = evalState (fibLet (n …Run Code Online (Sandbox Code Playgroud) 我想要一个相当有效的方法将整个表压缩为哈希值.
我有一些生成整个数据表的工具,然后可以用它们生成更多的表,依此类推.我正在尝试实现一个简单的构建系统来协调构建运行并避免重复工作.我希望能够记录输入表的哈希值,以便稍后检查它们是否已更改.建造一张桌子需要几分钟或几小时,所以花几秒钟建造哈希是可以接受的.
我使用的hack只是将pg_dump的输出传递给md5sum,但是这需要通过网络传输整个表转储以在本地盒上散列它.理想情况下,我想在数据库服务器上生成哈希.
在postgresql中查找行的哈希值给了我一种方法来计算一次一行的哈希值,然后可以以某种方式组合.
任何提示将非常感谢.
编辑发布我最终的结果: tinychen的答案对我不起作用,因为我显然不能使用'plpgsql'.当我在SQL中实现该函数时,它起作用,但对于大型表来说效率非常低.因此,我没有连接所有行哈希然后哈希,而是切换到使用"滚动哈希",其中前一个哈希与行的文本表示连接,然后进行哈希处理以产生下一个哈希.这要好得多; 显然在短字符串上运行md5数百万次额外时间比连接短字符串数百万次更好.
create function zz_concat(text, text) returns text as
'select md5($1 || $2);' language 'sql';
create aggregate zz_hashagg(text) (
sfunc = zz_concat,
stype = text,
initcond = '');
Run Code Online (Sandbox Code Playgroud) 在水星我可以使用:
A = B^some_field := SomeValue
Run Code Online (Sandbox Code Playgroud)
至A与B结合的副本,除了some_field是SomeValue不是不管它是B.我相信哈斯克尔相当于是一样的东西:
a = b { some_field = some_value }
Run Code Online (Sandbox Code Playgroud)
Scala是否有类似的东西用于"修改"不可变值.替代方案似乎是有一个构造函数直接设置实例中的每个字段,这并不总是理想的(如果构造函数应该保持不变).如果我必须明确地传递我想要修改副本的实例中的所有其他值,那么它会非常笨重而且更加脆弱.
我通过谷歌搜索,或者在语言参考手册或"Scala By Example"(我已经阅读了从头到尾,但尚未全部吸收,所以它可能好吧在那里).
我可以看到这个功能可能与Java风格的访问保护和子类有一些奇怪的交互,虽然......
我想结合一个python变量和模式.我该怎么做?
以下是我想做的事情.
re.search(r'**some_variable+pattern**',str_for_pattern_match,flags)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我正在开发我的第一款Android应用.它有一个模型,在用户进行更新时持久保存到数据库.
当onSaveInsanceState被调用时,我想保存,可以用来加载用户已经从数据库中处理文档的ID.但这只能在文档完全访问数据库后才会发生.在某些情况下,持久化复杂的文档可能需要几秒钟(我希望一旦我完成所有详细的注销,这将加速,并且在实际使用中,用户将分阶段构建复杂的文档,每个文档都是将被保存到数据库中,因此复杂文档不太可能一次性保存.
现在,Android上线程的#1规则是"不要阻止UI线程",所以当然数据库交互发生在一个单独的线程上.但我对Android生命周期的理解是,在许多情况下,调用onSaveInstanceState是因为Android系统想要终止进程.这表明我不能允许这个方法返回,直到数据库线程完成保存文档(实际上我的当前设计,我实际上不知道文档的ID号是什么,直到它被保存到数据库,所以我甚至不能把它放在保存状态的束中).
在这些情况下是否适合阻止等待执行持久性任务的UI线程?当onSaveInstanceState因为进程被杀死而被调用时,应用程序在前台不再可见,因此没有任何界面无法响应.
但是onSaveInstanceState当Activity实例被配置更新破坏时也会调用,当屏幕方向发生变化时会发生这种情况.横向旋转屏幕几秒钟后无法做任何事情是非常不幸的.在这种情况下,进程(以及因此内存空间)仍然存在,因此我不需要确保文档命中数据库,如果我只能在Bundle中存储对它的引用而不是它的id.但我不知道如何区分这两种情况.
这些情况是否有公认的做法?我应该阻止线程安全吗?我可以使用普通的Java线程原语来阻止和等待吗?有什么我可以做的不会阻止线程,但确保在Android关闭进程之前完成持久性任务?
所有这些也适用于onPause,onSaveInstanceState不一定会被称为.
我想用一些Visual Editor改进我的页面,并找到关于Mercury编辑器的这个轨道广播.All Done's,但是当我按下SAVE时,我已经重定向到我的页面而没有任何变化.没有错误,没有警告,只是未保存的格式化.任何人都可以帮助我吗?
一些代码:
# routes:
mount Mercury::Engine => '/'
resources :tasks do
resources :comments
member { post :mercury_update }
end
# My controller:
def mercury_update
task = Task.find(params[:id])
task.title = params[:title][:value]
task.body_task = params[:body_task][:value]
task.save!
render text: ""
end
# In views/layouts/mercury.html.erb
new Mercury.PageEditor(saveUrl, {
saveStyle: 'form', // 'form', or 'json' (default json)
saveMethod: null, // 'PUT', or 'POST', (create, vs. update -- default PUT)
visible: true // boolean - if the interface should start visible or …Run Code Online (Sandbox Code Playgroud) 我正在尝试(不成功)在运行时在haskell中创建一个"对象"*,其类型在运行时使用依赖类型定义.
我正在关注依赖类型的本教程,它们用于在运行时传递值的函数是一个函数,它接受Sing一个参数并使用模式匹配值Sing来获取运行时的数字.但是我无法访问任何Sing模式匹配.
我认为下面的代码可以工作,但我得到的实际上是非常令人失望的,编译器告诉我,n从类型定义来看randomNetwork,与n我在类型定义中捕获的不一样SNat.
{-# LANGUAGE
ScopedTypeVariables, TemplateHaskell, TypeFamilies, GADTs, KindSignatures,
TypeOperators, FlexibleContexts, RankNTypes, UndecidableInstances,
FlexibleInstances, InstanceSigs, DefaultSignatures, DataKinds,
RecordWildCards, StandaloneDeriving, MultiParamTypeClasses #-}
module Main where
-- some imports to make the code below main work
import Control.Monad.Random
import GHC.TypeLits
import Data.List
--import Grenade
import Data.Singletons
import Data.Singletons.TypeLits
main = do
let sizeHidden = toSing (20 :: Integer) :: SomeSing Nat
net0 <- case sizeHidden …Run Code Online (Sandbox Code Playgroud) haskell ×3
android ×1
arrays ×1
dictionary ×1
ghc ×1
hash ×1
immutability ×1
lifecycle ×1
memoization ×1
monads ×1
php ×1
postgresql ×1
python ×1
regex ×1
scala ×1
sql ×1
state-monad ×1
yaml ×1